• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Reguläre Ausdrücke & preg_replace()

R

rico2009

Guest
Hi,

ich habe mir mit JS Textformatierungen (Fett,Kursiv,...) gebaut. Jetzt will ich auch noch einen Link Formatieren, dazu habe ich folgendes geschrieben:
Code:
var link = prompt("Verweis angeben:","http://");
modbegin = "[LINK=" + link + "]" + link;
modend = "[/LINK]";
...
Das ganze schieße ich nun preg_replace und RegEx.:
PHP:
$suchmuster = array('~\[link=""\]~i','~\[(/)link\]~i');
$ersetze = array('<\1a href="">','<\1a>');
$beschreibung = preg_replace($suchmuster,$ersetze,$beschreibung);

Mein Problem: Wie bekomme ich den Link-Namen nun in href geschrieben? Die JS Variable habe ich nur in der Funktion die die ganze Formatierung erledigt zur Verfügung, diese kann ich also nicht nutzen. Kann man mit PHP einen bestimmten Teil von einem Textfeld auslesen oder wie kann ich das machen?

Gruß
rico2009
 
Hallo rico2009,

Dafür benutzt man geklammerte Ausdrücke:
Code:
$suchmuster = array('~\[link="(.*)"\]([^\[]*)~i','~\[(/)link\]~i');
 $ersetze = array('<\1a href="$1">$2','<\1a>'); // $1 enthält das Linkverweisziel und $2 den Linknamen

Grüsse
Dominique
 
Hi,

@jeko: Danke für deine Hilfe, dass werde ich nachher mal ausprobieren. Verstehe ich den Ausdruck richtig: Es dürfen beliebige Zeichen nach link="" kommen und danach dürfen nochmal beliebige Zeichen außer \[] kommen?
@ein schlauer: Das habe ich mir auch schon gedacht, aber ich bin jetzt schon so weit gekommen und jetzt will ich auch noch den Rest selber machen.

Gruß
rico2009
 
Hi,

ich habe das ganze nun mal ausprobiert und musste feststellen das mein PC mich verarscht. Wenn ich den Regulären Ausdruck im Netz testen lassen klappt er wunderbar und ersetzt auch brav so wie ich es haben will. Wenn ich den nun auf meine Homepage ausführe kommt folgendes dabei raus: [LINK=http://www.test.de]http://www.test.de, warum? Es ist alles gleich und ich kann es mir nicht erklären, waum es da klappt und hier nicht.

MfG
rico2009
 
Hi,

sorry das ich erst jetzt antworten, aber ich war im Urlaub gewesen.

Hier mein PHP Code:
PHP:
$suchmuster = array('~\[link="(.*)"\]([^\[]*)~i','~\[(/)link\]~i');
$ersetze = array('<a href="$1">$2','<\1a>');
Beim JS Code hat sich nichts geändert, siehe Beitrag vom 10-07-2010 13:48.

Gruß
rico2009
 
Deine RegExp passt einfach nicht auf den String - es fehlen die Anführungsstriche.

PS: 1. Was soll das: (/)? Warum fängst du den Slash - ergibt irgendwie keinen Sinn.
2. .* ist gierig - d.h. wenn du irgendwann später im Text auch ein "] hast passt das bis dort hin -> .*?
 
Hi,

danke kkapsner für dein Antwort. Leider kann ich nicht nachvollziehen wo da die Anführungszeichen fehlen sollen.

Zu PS 1: Stimmt, macht überhaupt keinen Sinn, werde das ändern.
Zu PS 2: Ok, gut zu wissen. Da ich leider von RegEx noch sehr wenig Ahnung habe, ich aber gerne bereit bin mehr zu lernen, würde ich gerne von dir ein paar Tipps haben wie ich das besser realisieren könnte.

Gruß
rico2009

Edit: Das mit den Anführungszeichen hat sich erledigt. Ich wusste zuerst nicht was gemeint war, nach längerem Betrachten des Codes ist es mir dann aufgefallen.
 
Zuletzt bearbeitet:
zu 2.: anstatt .* einfach .*? verwenden (also mit Fragezeichen) - dadurch wird der Ausdruck "ungierig".
Aber mit einen BBCodeParser mit RegExp zu schreiben ist nicht so leicht - v.A. wenn's ans Verschachteln geht... würde an deiner Stelle also wirklich auf einen schon bestehenden zurückgreifen.
 
Ok, danke für deine Antwort, ich werde mir mal einen bestehenden BBCodeParser angucken.
 
Zurück
Oben