Sonntag, 20. November 2005

Regular Expressions – Spitzfindigkeiten

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:

RegexPlor

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

Liked this post? Follow this blog to get more. 

Tags:
Labels: Uncategorized

Kommentar erfassen