Thread RegEx Frage (capturing) (9 answers)
Opened by docsnyder at 2006-09-25 17:32

Linuxer
 2006-09-25 22:12
#70243 #70243
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
[quote=docsnyder,25.09.2006, 16:52]Hätte jedenfalls eine gewisse Logik, denn wenn ich mit (?:...){2} repeaten will, dann hätte ich das, was da drin steht eben genau zwei mal, bzw. erwarte das gleiche Verhalten wie wenn ich es zweimal hinschreibe, oder?[/quote]
Die Definition sagt, dass nur die Klammern zählen, die ich hinschreibe; nicht jene, die durch Quantifier hinein"multipliziert" werden (bzw. sie sagt nicht, dass jene hineinmultiplizierten zählen würden).

Ich kann Deinen Ansatz verstehen und habe mich auch drüber gewundert; aber:

Wie weit soll die RE-Maschine denn mitarbeiten, wenn die Quantifier variabel werden? Wie weit soll sie Capturing betreiben und Ressourcen verschlingen?

Und das nur, weil der Programmierer dieses Verhalten vergessen hat und "mal eben" 65535 Submatches einfangen will ;o))

Wer 512 Submatches einfangen will, soll auch ebensoviele Klammerpaare setzen ;o))

Da finde ich die bisherige Handhabung sinniger.

Dass in der betreffenden Klammerung der letzte Treffer steht, erklär ich mir so (ohne in die RE-Maschine reingesehen zu haben), dass der Treffer bei der Wiederholung immer entsprechend überschrieben wird.
Z.B. beim IP-Match.

Code: (dl )
qr/(?:(\d{1,3})\.){3}(\d{1,3})/;


Es zählen die gesetzten Klammern; also gibt es $1 und $2 als Ergebnis, die abfragbar wären (Ich benutze $1 mal als Synonym für die eigentliche Klammerung).
$1 soll dabei 3mal vorkommen (gedacht war ja, dass es zu $1, $2 und $3 würde).
Für den ersten Durchlauf der Wiederholung wird das erste Oktett in $1 abgelegt; beim 2. das zweite und beim finalen 3. Durchlauf landet das dritte Oktett in $1. Danach kann $2 noch das vierte Oktett einfangen und fertig ist das Matching ...

Soweit meine Gedankengänge zu dem Thema...

[edit]Themen-Beobachtung aktiviert[/edit]\n\n

<!--EDIT|Linuxer|1159208834-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread RegEx Frage (capturing)