Ich habe einen regulären Ausdruck entwickelt, um einen XML-Block in einer Textdatei zu identifizieren. Der Ausdruck sieht wie folgt aus (ich alle Escape-java entfernt schlitzt es gut lesbar zu machen):Was ist der Unterschied zwischen [ s S] *? und .*? in Java reguläre Ausdrücke?
<\?xml\s+version="[\d\.]+"\s*\?>\s*<\s*rdf:RDF[^>]*>[\s\S]*?<\s*\/\s*rdf:RDF\s*>
Dann optimiert ich es und ersetzt [\s\S]*?
mit .*?
Es die XML plötzlich erkennen gestoppt.
Soweit ich weiß, bedeutet \s
alle white-space Symbole und \S
bedeutet, dass alle nicht weiß beabstandeten Symbole oder [^\s]
so [\s\S]
sollte logisch äquivalent sein zu .
ich nicht gierig Filter verwendet haben, so könnte, was der Unterschied sein ?
Standardmäßig stimmt '.' nicht mit Zeilentrennzeichen überein.Es kann alle Zeichen (einschließlich Zeilentrennzeichen) übereinstimmen, wenn Sie das Flag "Patter.DOTALL" verwenden. '[\ s \ S]' wird gesetzt und enthält alle Leerzeichen \ s und alle Nicht-Leerzeichen \ S, die effektiv alle Zeichen (einschließlich Zeilentrennzeichen) darstellen. – Pshemo
Das nachlaufende? trägt in beiden Fällen nichts bei. – EJP
Eine sehr verwandte: [* Was ist der Unterschied zwischen diesen RegEx *] (http://StackOverflow.com/a/14648811/3832970) –