Angestossen durch eine Anfrage von Kollege Burgdorfer kam das Thema Regular Expressions (dt. Reguläre Ausdrücke) wieder einmal auf’s Tapet. Aus meiner Sicht übrigens einer der genialsten Erfindungen, seit es Computer gibt – doch für Anfänger und auch Fortgeschrittene immer noch eine Knacknuss. „It just works“ jedenfalls können Regex nicht für sich beanspruchen. Der Benutzer sollte also halbwegs eine Ahnung haben, was er da mit Hilfe von Voodoo alles zu Stande bringt.
Ausdrucks-Hilfen
Burgdorfer fand prompt ein nettes kleines Tool für Mac OS X, das dem Lernenden aufzeigt, ob sein Ausdruck in etwa funktioniert oder nicht:
Ein kniffliger Ausdruck
Burgdorfer wollte anschliessend einen Substring aus einem String herausfiltern, der zwischen zwei bekannten Wörtern eingeklemmt ist, als Beispielsweise
google is considered to be very bad
Der Ausdruck, den ich ihm vorschlug und mit RegexPlor testete lautete deshalb
google(.+)bad
Das funktionierte erstaunlicherweise auf Anhieb einwandfrei.
Ich erinnerte mich aber an eine eigene, weiterführende Aufgabenstellung, die ich vor einiger Zeit zu bewältigen hatte – ich hatte Teile von HTML-Source-Code zu filtern. Das Problem war hier, dass mich ein zwischen einem bekannten Tag eingeschlossenen String interessierte, der Endtag aber dutzende Male im Dokument vorkam. Der Reguläre Ausdruck lieferte deshalb als Antwort den ganzen String bis zum letzten Vorkommen des Endtags zurück. In unserem Beispiel also:
google is considered to be very bad although there seem to be even more bad ass giants like microsoft who are much more dangerously bad
Die Lösung hatte ich damals durch einige längere Recherchen im Netz gefunden, sie aber in der Zwischenzeit wieder vergessen. In irgendeinem PHP-File steht der Suchstring noch, doch ich konnte mich leider nicht mehr erinnern, in welcher meiner hunderten PHP-Dateien genau. Etwas später kam mir der zündende Gedanke und ich fand das fehlende Zeichen wieder:
google(.+?)bad
Das zusätzlich angefügte Fragezeichen weist den Interpreter an, nur bist zum ersten Vorkommen des Delimiters zu suchen:
google is considered to be very bad although there seem to be even more bad ass giants like microsoft who are much more dangerously bad