Anzeige
Allgemein

RegEx: Was bedeutet greedy?

Bei Regulären Ausdrücken ist immer wieder von faulen und gierigen Quantifikatoren die Rede – nun, das üblichere Vokabular ist wohl RegEx, Quantifier, greedy und lazy …

Anzeige

Gierig

Im Grunde ist das Ganze ganz fix erklärt: Angenommen Ihr wollt alle Tags eines Texts, also alle spitzen Klammern samt jeglichen Inhalts treffen. Dann wird die „normale“, gierige Variante die erste Spitze-Klammer-Auf und die letzte Spitze-Klammer-Zu finden:

RegEx: \< .*\>
Text: <tag1>bla bla bla<tag2>
Match: <tag1>bla bla bla<tag2>

Ist ja auch logisch: \< findet Spitze-Klammer-Auf, .* findet beliebige Zeichenfolgen (eben inklusive spitzen Klammern) und \> findet die letzte Spitze-Klammer-Zu. Nun ist das aber nicht, was Ihr haben wollt – es sollen ja nur die Klammernpaare und die Texte dazwischen auf die RegEx zutreffen, nicht die Texte zwischen Klammerpaaren.

regex
Greedy: Ein langer Treffer – von der ersten Klammer-Auf bis zur letzten Klammer-Zu.

Nicht-gierig

Die Lösung ist simpel:

RegEx: \< .*?\>
Text: <tag1>bla bla bla<tag2> 
Match 1: <tag1> 
Match 2: <tag2>

In der RegEx ist also lediglich das ? hinzugekommen – und damit wird jeweils die nächste Spitze-Klammer-Zu gefunden. Diese Variante ist faul, fahndet nach einem schnellen Treffer und gibt viele einzelne aus, die erste Variante ist gierig und liefert lieber einen großen Treffer – daher die Bezeichnungen greedy und lazy.

Anzeige
regex
Lazy: Mehrere kurze Treffer von der ersten Klammer-Auf bis zur nächsten Klammer-Zu.

Das wohl beste Werkzeug zum Verständnis und für das Feintuning ist vermutlich Regex101.com. Ihr könnt hier RegExe und zu durchsuchenden Text eingeben und live sehen, was genau gefunden wird – alle Bestandteile der Regulären Ausdrücke und der Treffer werden farblich sauber dargestellt und vor allem detailliert erklärt!

regex
Regex101 ist einfach nur geil ;)

Wie man mit RegExen Dateien massenweise umbenennt, zeigen wir Euch hier für Windows und hier für Linux.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Do NOT follow this link or you will be banned from the site!