Mailinglisten-Archive |
Marian Steinbach wrote: > Ich hatte anfangs die Hoffnung, daß das durch eine Zeile ereg_replace > (bzw. eregi_replace) zu machen wäre. Einen halbwegs brauchbaren > Suchausdruck habe ich auch schon zusammen. Nur komme ich nicht auf den > Zinken, wie der Ersetzen-Teil aussehen müßte. Denn dieser muß ja nun > zweimal die Fundstelle zuzügl. weiterer Zeichen enthalten. Du willst sicherlich mehr als eine Ersetzung auf Deinem Text vornehmen. Wenn das so ist, bist Du mit den preg-Funktionen, insbesondere preg_replace, besser bedient. Diese Funktionen sind ab 27. Mai 1999 enthalten und in PHP 3.0.9 erstmal released worden. Ich empfehle, für die Verwendung dieser Funktionen auf 3.0.11 zu upgraden, wenn Du es nicht schon hast. Die preg_replace-Funktion verwendet Perl Regular Expressions und hat die angenehme Eigenschaft, als Pattern und Replace-Argumente auch Arrays verwenden zu können. Auf diese Weise kannst Du mit einem einzigen Aufruf viele Ersetzungen und Löschungen zugleich vornehmen lassen. Außerdem sind die perl-Regular Expressions mächtiger und schneller als die normlen ereg-Funktionen. Eine typische Anwendung sieht zum Beispiel so aus: $pattern = array( "=SUCHWORT1=", "=SUCHWORT2=", "=SUCHWORT3=", "=SUCHMICH(\d+)=i"); $replace = array( "ERSETZUNG_FÜR_SUCHWORT1", $ersetzung_fuer_suchwort2, "ERSETZUNG FÜR \\0", "Gefunden wurde das Suchmich \\1", ); $string = preg_replace($pattern, $replace, $string); Hier wird SUCHWORT1 durch den Text "ERSETZUNG_FÜR_SUCHWORT1" ersetzt, SUCHWORT2 wird durch den Inhalt der Variablen $ersetzung_fuer_suchwort2 ersetzt und anstelle von SUCHWORT3 wird "ERSETZUNG FÜR" eingesetzt, gefolgt von genau dem Match für die regular expression "SUCHWORT3". Der Suchausdruck "SUCHMICH\d+" paßt auf den literalen Text "suchmich" in beliebiger Groß- und Kleinschreibung (Angabe der Option i hinter dem Pattern) gefolgt von einer oder mehr Ziffern (1 oder mehr Wiederholungen durch +, \d für die zeichenklasse [0-9]). Um die Ziffern \d+ ist ein Anker () gelegt. Dieser Anker wird weiter unten als \\1 in der Ersetzung referenziert. PHP setzt dort statt des \\1 genau den von (\d+) gefundenen Text wieder ein. Man kann das \\1 mehrmals vorkommen lassen. Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.shonline.de/ (GPL)
php::bar PHP Wiki - Listenarchive