seth_not@home: RegEx: "zero-width positive look-ahead assertion

Beitrag lesen

gudn tach!

ich habe jetzt mal auf die Schnelle versucht den Begriff "assertion" grob zu definieren. [...]

aeh, wirst du das in etwa so auch in deinem buch machen wollen? das wuerde afais jeden neuling komplett verwirren oder auf den falschen weg bringen, weil es die sache imho unnoetig verkompliziert.

Das Syntaxelement »\d« ist eine »one-width look ahead assertion«

aber warum willst du ueberhaupt "one-width look ahead assertions" einfuehren? deine vorgehensweise ist zwar konsistent, aber mir scheint der begriff ueberfluessig zu sein.
klar, man kann sagen, dass in
  /uetzelpruetzel/

"etzelpruetzel" eine multiple-width look ahead assertion von "u" ist, dass "elpru" eine multiple-width look behind assertion von dem letzten "etzel" ist. aber das braucht man doch nicht. in der praxis wuerde man solche begriffe schlichtweg nicht benoetigen, geschweige denn benutzen.
es ist ja klar, dass bei /uetzelpruetzel/ eine zeichfolge gematcht werden soll, die ein "u" enthaelt, auf das ein "e" folgt, auf das ein "t" folgt etc.

Das Muster »(?=(a{2}))\1« ist eine »zero-width look ahead assertion«, gefolgt von einer »two-width look ahead assertion«, zusammen gesehen, handelt es sich um eine »two-width look ahead assertion«

das wuerde mich als neuling endgueltig verwirren. es erweckt dann zudem den eindruck, dass es dasselbe waere wie "(a{2})". ist es aber nicht, es ist "(?>(a{2}))".

ich haette es so formuliert:
(?=(a{2}))\1 ist hinterhaeltiges pattern. zunaechst taeuscht es durch eine <b>zero-width</b> look-ahead assertion an, ein subpattern - hier (a{2}) - gar nicht in $& aufzunehmen. direkt nach dieser assertion wird jedoch erzwungen, dass das subpattern doch noch in $& reingestopft wird, und zwar durch die backreference \1.
zusammengenommen hat dies denselben effekt, wie er beim atomic grouping auftritt, da sich das subpattern innerhalb der look-ahead assertion nicht darum kuemmert, was danach im restlichen pattern noch so alles verlangt wird, d.h. es wird unabhaengig vom restlichen pattern fleissig alles gefressen, was nicht bei drei auf den baeumen ist, naja ok, in diesem fall sind es nur zwei "a".
somit ist (?=(a{2}))\1 aequivalent zu dem independant pattern (?>(a{2})).

prost
seth