- Offizieller Beitrag
Servus.
Ich bin gerade dabei Reguläre Ausdrücke zu lernen und blicke jetzt überhaut nicht mehr durch.
In Perl ist :
(?<=...) = Positives Lookbehind (.. auf der linken Seite gefunden wird)
(?<!....) = Negatives Lookbehind (.. auf der linken Seite nicht gefunden wird)
(?=....) = Positives Lookahead (.. auf der rechten Seite gefunden wird)
(?!.....) = Negatives Lookahead (.. auf der rechten Seite nicht gefunden wird)
Laut der Deutschen Hifedatei ist :
(?<....) = Positives Lookbehind
(?<!....) = Negatives Lookbehind
(?....) = Positives Lookbehind
(?!...) = Negatives Lookbehind
Die aktuelle Hilfe von Autoit 3.3.2.0 schweigt sich darüber aus, weil nicht mehr in der Hilfe vorhanden.
Im Tutorial von BugFix steht das gleiche wie in der deutschen Hilfe.
In der Beschreibung der pcrepattern http://www.autoitscript.com/autoit3/pcrepattern.html steht:
ZitatLookahead assertions start with (?= for positive assertions and (?! for negative assertions.
Lookbehind assertions start with (?<= for positive assertions and (?<! for negative assertions
Ich bin jetzt total verwirrt. Wurden Lookahead und Lookbehind geändert oder beruht der Unterschied auf einer fehlerhaften Hilfedatei?
Soweit ich feststellen konnte, arbeiten nur die Varianten wie sie in Perl und Pcrepattern beschrieben werden.
PS: In der deutschen Hilfe steht :
Zitat\w Findet Buchstaben: a-z, A-Z oder Unterstrich (_).
Das ist nicht korrekt und muß \w Findet Buchstaben: a-z, A-Z,0-9 oder Unterstrich (_) heißen. Hab es jetzt in der Übersetzung der Hilfe ausgebessert. .
Edit: Meine Verwirrung hat sich gelegt, die deutsche Hilfe und die Beschreibung von BugFix stimmen nicht.
Spoiler anzeigen
#include <Array.au3>
$String = "Das muss hier stehen, bevor das gefunden wird"
;~ So wird es richtig ausgeführt
$ergebnis = Stringregexp($String,"(?<=Das muss hier stehen,).+",3)
_ArrayDisplay($ergebnis,"Überprüfung 1")
;~ So wird es falsch ausgeführt
$ergebnis = Stringregexp($String,"(?<Das muss hier stehen,).+",3)
_ArrayDisplay($ergebnis,"Überprüfung 2")
$String = "Damit das gefunden wird, muss das dehinter sein "
;~ So wird es richtig ausgeführt
$ergebnis = Stringregexp($String,".+(?=muss das dehinter sein)",3)
_ArrayDisplay($ergebnis,"Überprüfung 4")
;~ So wird es falsch ausgeführt
$ergebnis = Stringregexp($String,".+(?muss das dehinter sein)",3)
_ArrayDisplay($ergebnis,"Überprüfung 5")