![]() 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