nasauber.de

Blog

Reguläre Ausdrücke

Ich frage mich ernsthaft, wie ich früher ohne reguläre Ausdrücke leben konnte. Das könnt ich mir beim besten Willen nicht mehr vorstellen!

Anlaß für die Freude: Mein Gästebuch und mein Weblog verlinkt jetzt URLs in Einträgen und Kommentaren automatisch. War an sich auch net schwer: mit einem

/(.*?)((?:https?:\/\/|www.)[^\s">]+)(.*)/

ist da schon viel getan! Wobei ich zugeben muß, daß ich vor ein paar Jahren noch mit Unverständnis auf eine fürs ungeübte Auge verständlicherweise kryptische Zeile Code reagiert hätte ;-) Die php-Umsetzung sieht dann folgendermaßen aus:

preg_match("/(.*?)((?:https?:\/\/|www.)[^\s">]+)(.*)/", $eintrag, $treffer);

Danach hat man dann in $treffer[1] den Text vor dem ersten Link, in $treffer[2] den Link selber und in $treffer[3] den Text danach. Dann muß man ja bloß schauen, daß der Link auch mit „http://“ anfängt und ob's ein interner ist (/^http:\/\/www.nasauber.de/) und entsprechend verlinken. Dann ab mit Treffer 1 und 2 in die Ausgabe und Treffer 3 wird wiederum nach nem Link durchsucht. Und so weiter :-)

Mit Perl könnt man das natürlich noch schöner machen. Und kürzer: Nach einem

$eintrag =~ !((?:https?://|www.)[^\s">]+)!;

hat man in $` den Text vor dem Link, in $1 den Link selber und in $' den Text danach. Aber wenn der Rest der Homepage (leider) in php geschrieben ist, kann man halt nix machen …

Auch meine kürzlich geschriebene Download-Statistik wäre ohne reguläre Ausdrücke aufgeschmissen: denn da wird erstmal geschaut, was grep '$gestern_log.\+GET.\+.gz' /.../...log so zu bieten hat und per /\"(.+?)\".+\"(.+?)\"$/ werden die relevanten Daten rausgezogen.

Ich weiß nicht, wer den Kram erfunden hat … aber vielen Dank dafür :-)