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 ...
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: bla bla bla Match: bla bla bla
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.
Nicht-gierig
Die Lösung ist simpel:
RegEx: \< .*?\> Text: bla bla bla Match 1: Match 2:
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.
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!
Wie man mit RegExen Dateien massenweise umbenennt, zeigen wir Euch hier für Windows und hier für Linux.