preg_replace mit Funktion ersetzen

Dass man mit preg_replace Reguläre Ausdrücke durch Strings ersetzen kann, habe ich wohl gewusst; dass man mit dem “/e“-Schalter auch statt des Strings eine Funktion mit einem oder mehreren Referenzen auf das Suchmuster angeben kann, habe ich leider erst vor kurzem herausgefunden.
Bisher habe ich solche Dinge immer mit preg_match(_all) und einer anschließenden Schleife gelöst. Allerdings ist preg_replace(mit “/e“) in einfachen Dingen (zumindest laut Xdebug) einiges schneller und auch weniger Tipparbeit.

Beispiel (Html-Tags und Attributnamen klein geschrieben, die Attribute jedoch nicht):

$str = '<P>Das ist EIN</P><P STYLE="text-align:center" Alt="Test">TEST</P>';
$regexAttributes = '/([a-zA-Z]+=)/e';
$regexTags = '/(<\/?[a-zA-Z]+)/e';
$str = preg_replace($regexAttributes, "strtolower('\\1')", $str);
$str = preg_replace($regexTags, "strtolower('\\1')", $str);

Vielleicht würde das auch in einem einzigen Regex gehen, aber Reguläre Ausdrücke waren noch nie mein Ding – ebensowenig wie Rosinen oder Rosenkohl (man erkennt ein eindeutiges „R“-Muster).
Hat man mehrere Teilmuster, so kann man diese einfach hintereinanderschreiben:

$str = preg_replace($regex, "funktion('\\1\\2')", $str);
//Oder mit mehreren Funktionen
$str = preg_replace($regex, "funktion1('\\1').funktion2('\\2')", $str);
//die Referenzierung ist auch ohne Funktion möglich
$str = preg_replace($regex, "funktion('\\1').'\\2'", $str);

Bei einfachen Funktionen kann man sich mit dem “\e“ hinter dem Regex doch vielleicht die eine oder andere Schleife sparen.


Ähnliche Artikel

Geschrieben am
Share |

Kommentare

  1. Thilo schrieb am 1.11.06:1

    Danke, genau das hab ich gesucht. Steht sogar im PHP Handbuch, aber da hab ichs irgendwie nicht gefunden ;-)


Dein Kommentar:

Sämtliche Html-Tags werden gelöscht, der Kommentar kann mit Textile formatiert werden.
Vor dem Absenden müsst ihr euch einmal die Vorschau ansehen.