2009-07-13 9 views
11

Ich lese das PCRE-Dokument, und es bezieht sich auf Possessivquantoren, aber nicht explizit oder spezifisch definiert sie. Ich weiß, was ein gieriger Quantifizierer ist, und ich weiß, was ein fauler Quantifizierer ist. Aber besitzergreifend?Kann mir jemand Possessive Quantifiers erklären? (Reguläre Ausdrücke)

Die PCRE man page scheint zu betrügen, wenn es den Begriff verwendet, ohne es zu definieren. Die man-Seite besagt ausdrücklich, dass der Begriff Possessiv-Quantoren zuerst in Friedl's book definiert wurde. Nun, das ist großartig, aber ich habe Friedls Buch nicht, und beim Lesen der Manpage zwischen den Zeilen kann ich nicht herausfinden, was Possessivquantifizierer von Gierigen unterscheidet.

  • ? = null oder eins, gierig
  • ?? = Null oder eins, lazy
  • ? + = Null oder eins, possessiven
  • '+' = ein oder mehr, gierige
  • +? = Eine oder mehr, faul
  • ++ = ein oder mehr, besitzergreifend
+0

Diese Frage an den [Regular Expression FAQ Stack-Überlauf] (http://stackoverflow.com/a/22944075/2736496), unter "Quantifizierer> Mehr über die Unterschiede ..." – aliteralmind

Antwort

11

Vielleicht ist der beste Ort zu beginnen, ist Regex Tutorial - Possessive Quantifiers:

Wenn die Wiederholung Operatoren oder quantifiers diskutieren, erklärte ich der Unterschied zwischen gierigen und faulen Wiederholung. Gierigkeit und Faulheit bestimmen die Reihenfolge, in der die Regex Engine die möglichen Permutationen des Regex-Musters versucht. Ein gieriger Quantifizierer wird zuerst versuchen, das Token so oft wie möglich, zu wiederholen und nach und nach Spiele wie die Motor-Backtracks aufzugeben, um eine insgesamt Übereinstimmung zu finden. Ein fauler quantifier wird zuerst wiederholen Sie die Token als einige Male als erforderlich, und nach und nach dem Spiel erweitern, wie der Motor durch die Regex Backtracking eine Gesamt Übereinstimmung zu finden.


Possessive Quantoren sind ein Weg, um die Regex-Engine von versuchen, alle Permutationen zu verhindern. Dies ist in erster Linie nützlich für die Performance Gründe. Sie können auch Possessiv-Quantoren verwenden, um bestimmte Treffer zu eliminieren.

+8

Ahh hinzugefügt wurde, Aha! Nach dem Lesen dieses Tutorials, es scheint mir faul ist nicht das Gegenteil von gierig. Lazy sollte vielleicht "großzügig" genannt werden, und die possessive Form sollte eigentlich faul genannt werden, weil sich besitzergreifende Quantifier nicht zurückziehen wollen. Sie werden keine zusätzliche Arbeit tun, die nur faul ist. – Cheeso

+4

Possessivquantifizierer weigern sich, zurückzugehen - das ist die beste Erklärung, die ich darüber gelesen habe. danke fürs zusammenfassen :) – vondip

Verwandte Themen