- Offizieller Beitrag
Hi,
folgendes Problem:
Ich möchte einen String auf Vorkommen eines Wortes (z.B. Apfel) untersuchen.
Bedingung:
Ist das Wort selbst in einem quotierten String (mit ' oder ") soll kein Match erfolgen.
Vor dem Match, aber auch vor dem quotierten String, können andere Zeichen stehen.
Ansatz:
Match für das Wort(insensitiv): "(?i)apfel"
Nun Backreferenz wegen Quotierung: "(?<!['\x22])(?i)apfel" (\x22 ist der Hex-Wert für ASCII des ")
Klappt,
gefunden wird Apfel in: xyz 123 Apfel
nicht gefunden in: 'Apfel xyz ODER xyz 'Apfel ==>ABER
gefunden in: ' Apfel xyz
Also Bedingung:
keine Qoutierung UND (optional) kein anderes Zeichen nach der Quotierung.
Jetzt kommt eine Stolperfalle, ich will also auf Backreferenzen unterschiedlicher Länge prüfen.
Das geht aber nur, wenn es Toplevel-Referenzen sind.
OK, wenn ich das als ODER-Option gestalte ist das gewährleistet.
Neues Pattern: "(?<!(['\x22](.+?)|['\x22]))(?i)apfel"
Das klappt im RegExprogramm (RegexBuddy) super, aber in AutoIt gibt das keinen Match.
Global $s[4] = ["xyz 123 Apfel","'Apfel xyz"," Apfel xyz","xyz ' Apfel"]
For $i = 0 To UBound($s) -1
ConsoleWrite($s[$i] & ' = ' & @TAB & StringRegExp($s[$i], "(?<!(['\x22](.+?)|['\x22]))(?i)apfel") & @CRLF)
Next
Irgendeine Idee?