Wenn ich mir so manche regulären Ausdrücke (regular expressions oder kurz RegEx) ansehe, dann verstehe ich teilweise nur Bahnhof. Umso mehr freut es mich, wenn ich wieder etwas mehr von dem Mysterium verstehe 🙂 Ich bin neulich das erste mal bewusst mit den Regex-Konstrukten ‚lookahead‘ und ‚lookbehind‘ in Kontakt gekommen. Damit kann man darauf prüfen, ob vor bzw. hinter dem Gesuchten etwas bestimmtes vorkommt, oder auch nicht. Ich möchte euch diese Konstrukte heute einmal ganz kurz vorstellen. Ich denke am besten sehen wir uns das mal an einem Beispiel an:
Nehmen wir mal den String ‚Ich habe Hunger und habe Durst.‘. Ich möchte hier für das Beispiel auf das erste ‚habe‘ matchen.
Mit lookahead:
/habe(?= Hunger)/g
=> matcht auf ‚habe‘ gefolgt von ‚ Hunger‘
/habe(?! Durst)/g
=> matcht auf ‚habe‘, solange danach nicht ‚ Durst‘ kommt
Mit lookbehind:
/(?<=Ich )habe/g
=> matcht auf ‚habe‘, wenn davor ‚Ich ‚ steht
/(?<!und )habe/g
=> matcht auf ‚habe‘, aber nur, wenn davor kein ‚und ‚ steht
Alle diese Beispiele finden jeweils das erste ‚habe‘ aus dem Beispielsatz. Ich hoffe das war jetzt für irgendjemand hilfreich und auch halbwegs verständlich. Wenn dich das Thema interessiert, dann gibt es hier noch mehr Info dazu.