Thread join (//, @buffer): join mit // hängt von Matching ab (16 answers)
Opened by El Ron at 2007-02-07 10:35

sid burn
 2007-02-08 17:21
#74109 #74109
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=betterworld,08.Feb..2007, 16:05][quote=pq,08.02.2007, 09:41]perlre, "Repeated patterns matching zero-length substring"
aber verstehen muss man das nicht =)[/quote]
Dies hingegen bezieht sich nicht auf leere Patterns, sondern auf Patterns, die auf leere Strings matchen.[/quote]
Nicht ganz.
Es bezieht sich auf matches die kein Text Konsumieren. Kein text wird auch durch (?= ) erreicht. Zero-Width sind alle Sachen wie Lookahead, Lookbehind etc.

Als Beidpiel wurde ja
Code: (dl )
"foo" =~ m/(o?)*/;

genannt. Dies würde eine unendliche Schleife sein.

Den die Regex Engine fängt an das "f" mit dem "o" zu Vergleichen. Das matcht nicht. Aber da ja hinter dem o ein Fragezeichen ist bedeutet es, der matcht ist auch erflogreich wenn kein o vorkommt.

Die Regex Engine steht also immer noch beim "f" und springt kein Zeichen weiter. Naja und durch das * wird jetzt der Ausdruck o? wieder auf das f angewendet.

Naja eine endlosschleife halt. Problem ist halt das kein text Konsumiert wird, also die Regex Engine nie ein Zeichen weiter Springt. Gleiche Problematik könnte man auch mit den gesagt Lookaheads zusammen bauen.


EDIT:
Achso, das mit dem Zero-length bedeutet nur das Perl solche infinity Loops automatisch erkennt. Und anstatt ständig und endlich oft immer wieder gegen das "f" zu matchen, springt die Regex Engine bei Perl halt automatisch ein Zeichen weiter. Somit werden diese Loops halt vermieden.\n\n

<!--EDIT|sid burn|1170948733-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread join (//, @buffer): join mit // hängt von Matching ab