RegExp - Backreference funktioniert nicht

Sven Petruschke

Erfahrenes Mitglied
Hallo, vielleicht könnte sich ein RegExp-Gott meinem Problem annehmen. Sämtliche Versuche, Backreferences in das aktuelle Suchpattern einzubinden scheiterteten leider. Hier ein simples Beispiel:

$str = "<b>Text</b>";
preg_match("!<(.+?)>(.*?)</\1>!", $str, $matches);
print_r($matches);

(Den Code habe ich nicht gehighlightet, weil mir sonst der Backslash vor der Backreference entfernt wird)

Ich versuche mittels \1 auf den Inhalt des ersten Subpatterns zuzugreifen.im oberen Beispiel sollte das erste Subpattern ein b finden und dieses über die Backreference in den abschließenden HTML-Tag einbinden. Doch preg_match() gibt FALSE zurück.

Verwende ich als Suchpattern !<(.+?)>(.*?)</b>!, dann funktioniert es wunderbar.

Weiss jemand, was ich falsch mache?

Vielen Dank, snuu
 
Zuletzt bearbeitet:
Also ich kenn mich in diesem Thema nicht wirklich gut aus, aber ich habe mal wo gelesen, dass man Regex immer in einfachen ' schreiben sollte...
So funktioniert's auch :rolleyes:

preg_match('!<(.+?)>(.*?)</\1>!', $str, $matches);

//EDIT: Wenn du normale Anführungszeichen verwendest, musst du den Backslash excapen (\\1), dann geht's auch.
 
Zuletzt bearbeitet:
Code:
$tags = implode("|", array('b', 'i', 'u'));

$text = preg_replace("/(&lt;|<|\[)(" . $tags . ")(&gt;|>|\])(.+)\\1\/\\2\\3/", "<\\2>\\4</\\2>", $text);

Funktioniert mit spitzen und eckigen Klammern und mit ge-htmlspecialchar`ten spitzen klammern. Hoffe ich...
 
Zurück