Bitte um Erklärung einer Variablenzuweisung
Phil
- php
Hi!
ich habe hier eine Variablenzuweisung:
$ausgabe=eregi_replace("\[url\]www.([^\[]*)\[/url\]","<a href="http://www.\1" target=_blank>\1</a>",$ausgabe);
der Ausruck eregi_replace sagt mir schon was, aber:
1.) was sollen die vielen \ darin?
2.) Sind die als Schutz vor fehlinterpretationen?
3.) Und wenn ja, warum sind bei \[ 2x\ während bei " nur 1x\ ist?
4.) Und was bedeutet das ([^\[]')? und wie kommt die URL in den Link, wo nun ja nur \1\ steht?!
Huhu Phil
$ausgabe=eregi_replace("\[url\]www.([^\[]*)\[/url\]","<a href="http://www.\1" target=_blank>\1</a>",$ausgabe);
der Ausruck eregi_replace sagt mir schon was, aber:
1.) was sollen die vielen \ darin?
Mit dem Backslash werden Zeichen die Teil der "regular expression"-Syntax sind escaped.
2.) Sind die als Schutz vor fehlinterpretationen?
sozusagen
3.) Und wenn ja, warum sind bei \[ 2x\ während bei " nur 1x\ ist?
In Deinem Beispiel sind in der Tat einige \s mehr als nötig vorhanden. Schaden richten sie (vom Sehapparat des Betrachters einmal abgesehen) aber nicht an.
4.) Und was bedeutet das ([^\[]')? und wie kommt die URL in den
Link, wo nun ja nur \1\ steht?!
\1 enthält die erste Klammer des regulären Ausdrucks
btw. Dein Beispiel findet nur www-links. Subdomains wie z.B. forum.de.selfhtml.org bleiben aussen vor.
eine etwas kürzere Variante wäre z.B.
$ausgabe=preg_replace("=[url](.*)[/url]=Ui","<a href="http://\1" target=_blank>\1</a>",$ausgabe);
da werden dann auch andere subdomains als WeWeWe mit gefunden
Viele Grüße
lulu
Danke für deine Antwort, aber was heisst denn nun
([^\[]*)
ganz genau, weil das möchte ich noch wissen, was wird da ein-/ausgelesen?
Hallo phil!
Danke für deine Antwort, aber was heisst denn nun
([^\[]*)
Der PHP-Parser macht da
([^[]*)
draus. Und das verbleibende \ ist, damit der RegExp-Parser eine [ eckige Klammer in die Zeichenklasse bekommt.
Das ^ am Anfang invertiert die Zeichenklasse und das Sternchen dahinter passt auf beliebig viel davon: Der Ausdruck passt also auf alles, was keine öffende eckige Klammer ist.
Gruss,
Carsten