Suche…


Bemerkungen

NB Emulation von Possessiv-Quantifizierern

Grundlegende Verwendung von Possessive Quantifiers

Possessive Quantifizierer sind eine weitere Klasse von Quantifizierern in vielen Regex-Varianten, die es ermöglichen, das Zurückverfolgen effektiv für ein gegebenes Token zu deaktivieren. Dies kann dazu beitragen, die Leistung zu verbessern und in bestimmten Fällen Übereinstimmungen zu vermeiden.

Die Klasse der besitzergreifend quantifiers kann von faulen oder gierigen Quantifizierer durch Zugabe eines unterscheiden + nach dem Quantifizierer, wie unten zu sehen:

Quantor Gierig Faul Besitzergreifend
Null oder mehr * *? *+
Ein oder mehr + +? ++
Null oder eins ? ?? ?+

Betrachten Sie zum Beispiel die beiden Muster ".*" Und ".*+" , Die mit der Zeichenfolge "abc"d In beiden Fällen stimmt das " am Anfang der Zeichenfolge" überein, aber danach weisen die beiden Muster unterschiedliche Verhaltensweisen und Ergebnisse auf.

Der gierige Quantifizierer schlurft dann den Rest der Zeichenkette abc"d . Da dies nicht zum Muster passt, wird er zurückverfolgt und das d , wobei der Quantifizierer abc" bleibt. Da dies immer noch nicht mit dem Muster übereinstimmt, wird der Quantifizierer das " löschen " , so dass nur noch " abc " enthalten ist. Dies stimmt mit dem Muster überein (da " das " mit einem Literal und nicht mit dem Quantifizierer übereinstimmt), und der Regex gibt den Erfolg an.

Der Possessiv-Quantifizierer verschluckt auch den Rest der Saite, wird jedoch im Gegensatz zum gierigen Quantifizierer nicht zurückgespult. Da der Inhalt abc"d den Rest des Musters der Übereinstimmung nicht zulässt, wird der reguläre Ausdruck angehalten und der Fehler wird gemeldet.

Da die Possessiv-Quantifizierer kein Backtracking durchführen, können sie bei langen oder komplexen Mustern zu einer erheblichen Leistungssteigerung führen. Sie können jedoch gefährlich sein (wie oben dargestellt), wenn man nicht genau weiß, wie Quantifizierer intern arbeiten.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow