Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Reguläre Ausdrücke / Lookaround-Assertions

Lookahead

Ein Lookahead prüft, was unmittelbar nach der aktuellen Position kommt. Er wird in spitzen Klammern geschrieben:

  • <?before …> — gelingt, wenn der Text danach trifft (bejahender Lookahead)
  • <!before …> — gelingt, wenn der Text danach nicht trifft (verneinender Lookahead)

Die Zusicherung selbst trifft keine Zeichen; sie prüft nur die Position. Treffen Sie etwa eine Zahl nur dann, wenn ihr das Wort dollars folgt:

say '100 dollars' ~~ / \d+ <?before ' dollars'> /; # 「100」

Der Treffer ist nur 100 — der Text dollars wurde geprüft, aber nicht mit aufgenommen.

Da der Lookahead nur behauptet, was folgt, trifft dieselbe Zahl je nach der Währung dahinter oder eben nicht:

say so '100 euro'    ~~ / \d+ <?before ' euro'> /; # True
say so '100 dollars' ~~ / \d+ <?before ' euro'> /; # False

Die Ziffern sind in beiden Zeichenketten gleich, doch die Zusicherung nimmt 100 nur an, wenn euro folgt.

Die verneinende Form ist nützlich für „… aber nicht, wenn darauf … folgt“. Treffen Sie cat nur dann, wenn keine Ziffer folgt:

say so 'cats' ~~ / cat <!before \d> /; # True
say so 'cat5' ~~ / cat <!before \d> /; # False

In cat5 sieht der Lookahead direkt hinter cat eine Ziffer, die verneinende Zusicherung scheitert also, und damit scheitert der ganze Treffer.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Lookaround-Assertions   |   Quiz — Lookahead


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.