Archiv 28. Februar 2006

Dienstag, 28. Februar 2006

Regex: Tags mitsamt Inhalt löschen

Regular Expressions gehören zu den fantastischsten Erfindungen der Software-Industrie. Doch manchmal bereiten sie einem eben auch unnötiges Kopfzerbrechen, wie mir heute. Und da weiss man wieder: Diese Regexes wird man wohl bis ans Lebensende nicht vollumfänglich beherschen!

Die Aufgabenstellung war im Grund gar nicht so kompliziert: Für einen Kunden musste ich mit PHP und preg_match den Inhalt eines bestimmten div-Elements löschen.

Bis ich aber den Pattern zusammen hatte, vergingen wohl über 60 Minuten, in denen ich verbissen unzählige Kombinationen mit Klammern, Punkte, Sternen und Plus-Zeichen ausprobierte.

Hilfreich war dabei das für Mac OS X geschriebene Tool Regexplor, das Strings gemäss den Anweisungen im Pattern farbig hervorhebt.

Die Lösung

Folgendes kam schlussendlich heraus:

/(<div id=\"customer\">.+?<\/div>)/s

Das klitzekleine s am Schluss war die Lösung – es weist PCRE an, den Punkt („matches (almost) any character“) auch auf Newlines (\n) anzuwenden (PHP-Doku). Erst so beendet der Parser seine Arbeit nicht, wenn er auf ein Zeilenende stösst.

Das war eine Zangengeburt!

Tutorials

Ein umfangreiches Tutorial findet sich übrigens unter Regex-Tutorial.

Tags:
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen