Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Reguläre Ausdrücke / Lookaround-Assertions / Exercises / Zwischen Klammern
Lösung: Zwischen Klammern
Hier ist eine mögliche Lösung der Aufgabe.
Code
say '$50' ~~ / <?after '$'> \d+ >> <!before '.'> /;🦋 Du findest den Quellcode in der Datei whole-dollar.raku.
Ausgabe
「50」Kommentare
<?after '$'>ist ein bejahender Lookbehind — er verlangt ein$unmittelbar vor der Zahl — und<!before '.'>ein verneinender Lookahead — er verlangt, dass kein.folgt. Weder das$noch die Umgebung wird Teil des Treffers, das Ergebnis ist also nur50.Das
>>ist eine Wortgrenze, die das Ende der Zahl markiert. Ohne sie könnte das gierige\d+zurückweichen: Bei$39.99gäbe es die9her und träfe3(dem kein.folgt).>>zwingt dazu, die ganze Zahl zu nehmen, sodass$3.99und$39.99richtigerweise nichts treffen.Das ist ein Fall, in dem sich ein Lookahead lohnt: „nicht gefolgt von einem Dezimalpunkt“ lässt sich nicht mit einer gewöhnlichen capturenden Gruppe ausdrücken, denn dort gibt es nichts zu capturen — nur eine Bedingung zu prüfen.
Kursnavigation
← Zwischen Klammern | Adverbien →