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.

Anzeige

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!
Close
Close