Hab mal eine RegEx-Frage die mich grad ziemlich beschäftigt:
Ich habe folgenden String:
Bla
"ABCDEFG"nnn
"ABCDEFGH"nnnn
"ABCDEFGHIJHKLMNO"nnn
"ABCDEFGHIJHKLMNO"nnn
"ABCDEFGHIJHKLMNO"nnn
"ABCDEFG"nnn
"ABBB"nnn
"ABBB"nnnnn
Diesen will ich per regulären Ausdruck so auswerten das ich alle Buchstabenketten mit einer Mindestlänge von 7 Buchstaben als Output erhalte welche im Gesamtstring mindestens 3x vorkommen.
Hab mal als Beispiel das in Autoit dargestellt:
$String = "Bla" & @CRLF & _
'"ABCDEFG"nnn' & @CRLF & _
'"ABCDEFGH"nnnn' & @CRLF & _
'"ABCDEFGHIJHKLMNO"nnn' & @CRLF & _
'"ABCDEFGHIJHKLMNO"nnn' & @CRLF & _
'"ABCDEFGHIJHKLMNO"nnn' & @CRLF & _
'"ABCDEFG"nnn' & @CRLF & _
'"ABBB"nnn' & @CRLF & _
'"ABBB"nnnnn' & @CRLF
$RegEx = StringRegExp($String, '(?s)(\w{7,})(?:.+\1){2}', 3)
for $i = 0 to UBound($RegEx) - 1
msgbox(0,"", $RegEx[$i])
Next
Alles anzeigen
Problem dabei:
Er findet korrekt die erste Zeichenkette ABCDEFG.
Die Zeichenkette ABCDEFGHIJHKLMNO auf die die Bedingungen ebenfalls zutreffen wird allerdings nicht gefunden.
Der Grund ist anscheinend der das der erste Match Teil des Matches 2 ist und und der Capture-Bereich bis Zeile 7 des Strings geht.
Erst Nach diesem Capture-Bereich wird weiter gesucht - denn:
Wenn ich folgendes als String nehme:
Bla
"ABCDEFG"nnn
"ABCDEFGH"nnnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"ABCDEFG"nnn
"ABBB"nnn
"ABBB"nnnnn
wird QBCDEFGHIJHKLMNOPQRSTUVW nicht zusätzlich gematcht - aber wenn ich stattdessen diesen String nehme:
Bla
"ABCDEFG"nnn
"ABCDEFGH"nnnn
"ABCDEFG"nnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"QBCDEFGHIJHKLMNOPQRSTUVW"nnn
"ABBB"nnn
"ABBB"nnnnn
schon.
Die Frage ist also:
Wie kann ich den regulären Ausdruck anweisen auch innerhalb eines Match-Bereiches weiter zu suchen?
Vielen Dank euch schonmal im Voraus.