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