suchen und ersetzten mit preg_replace - HILFE

jarkand

Grünschnabel
Hallo zusammen,

ich habe die letzten zwei Tage damit zugebracht im Internet und div. Büchern nach einer Lösung für mein Problem zu suchen - ohne Erfolg :mad:

Ich hoffe hier gibt es jemand der mir bei dieser Sache helfen kann. OK, zum Problem:
Ich versuche eine Funktion zu schreiben die mir mittels preg_replace alle Vorkommen von "x" in einem String ersetzt. Beispiel:
PHP:
function replace_code($code) {
		$suchmuster[0] = "(\[QUOTE\])";
		$suchmuster[1] = "(\[/QUOTE\])";
		$suchmuster[2] = "(\[B\])";
		$suchmuster[3] = "(\[/B\])";
		$suchmuster[4] = "(\[I\])";
		$suchmuster[5] = "(\[/I\])";
		$suchmuster[6] = "(\[U\])";
		$suchmuster[7] = "(\[/U\])";
		$suchmuster[8] = "(\[URL\])";
		$suchmuster[9] = "(\[/URL\])";
												
		$ersetzungen[0] = '</p>Quote:<p class="quote">';
		$ersetzungen[1] = '</p>';
		$ersetzungen[2] = '<span class="quote_bold">';
		$ersetzungen[3] = '</span>';
		$ersetzungen[4] = '<span class="quote_italic">';
		$ersetzungen[5] = '</span>';
		$ersetzungen[6] = '<span class="quote_underline">';
		$ersetzungen[7] = '</span>';
		$ersetzungen[8] = '<span class="quote_url"><a href="LINK">'LINK'</a>';
		$ersetzungen[9] = '</span>';

		$zeichenkette = preg_replace($suchmuster, $ersetzungen, $code);
		
		return nl2br($zeichenkette);
	}
...
echo replace_code($string);
mit

$string = "Bold Text
Normal Text
Italic Text
Underscored
http://www.mydomain1.com
[QUOTE]QUOTED
Bold Text
Normal Text
Italic Text
Underscored
http://www.mydomain2.com

[/QUOTE]";


Das alles funktioniert schon mal sehr gut nur mit den Links bekomme ich es einfach nicht hin. Ich weiss nicht wie ich den Inhalt zwischen den Tags "URL" und "/URL" zu einem Link machen kann. Und ich werde aus den Suchmustern wie z.B.: "^/(.*?)" etc. einfach nicht schlau. Kann mir bitte jemand helfen?

Liebe Grüsse aus dem Süden,
Michael
 
So, wie du das machst, macht das IMHO keinen Sinn!

Entweder schreibst du

PHP:
$text = str_replace('', '<b>', $text);
$text = str_replace('', '</b>', $text);

Oder du arbeitest richtig mit preg_replace. Wenn ich mich richtig errinere, geht das so:

PHP:
$text = preg_replace('#\[B\](.*)\[/B\]#Uism', '<b>\1</b>', $text);

Du musst alle Sonderzeichen escapen und brauchst einen Delimiter am Anfang und am Ende des zu suchendem Strings (ich habe # genommen). Das (.*) ist ein Platzhalter. Diesen Platzhalter findest du bei der Ersetzung als "\1" wieder, sozusagen der Platzhalter Nummer 1. Im ersten Parameter musst du die Platzhalter nicht mit Nummern kennzeichnen, die werden automatisch durchnummeriert.

Guck mal unter den folgenden Links:

http://tut.php-q.net/regex.html
http://tut.php-q.net/login-news.html#u13

Ich hoffe, ich konnte dir helfen!
 
Oder du arbeitest richtig mit preg_replace. Wenn ich mich richtig errinere, geht das so:

PHP:
$text = preg_replace('#\[B\](.*)\[/B\]#Uism', '<b>\1</b>', $text);

Du musst alle Sonderzeichen escapen und brauchst einen Delimiter am Anfang und am Ende des zu suchendem Strings (ich habe # genommen). Das (.*) ist ein Platzhalter. Diesen Platzhalter findest du bei der Ersetzung als "\1" wieder, sozusagen der Platzhalter Nummer 1. Im ersten Parameter musst du die Platzhalter nicht mit Nummern kennzeichnen, die werden automatisch durchnummeriert.

Ich hoffe, ich konnte dir helfen!

Also, das war genau das was ich gesucht habe! Vielen, vielen DANK Ma-Ju. Die Links waren GOLD wert!
 
Zurück