phpbar.de logo

Mailinglisten-Archive

[php] Text parsen und URLs verlinken

[php] Text parsen und URLs verlinken

Kristian =?iso-8859-1?Q?K=F6hntopp?= kk_(at)_netuse.de
Tue, 06 Jul 1999 13:04:02 +0200


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