Regex
Tobias Perschon
- php
ich möchte alle vorkommen von [color=FARBE]TEXT[/color] ersetzen mit <span style="color:FARBE;">TEXT</span>
allerdings gibt es ein problem wenn in dem string öfters ein color tag steht:
z.b.:
$msg = "[color=red]text1[/color] Blabla [color=green]text2[/color]";
$msg = eregi_replace("[color=(.*)](.*)[/color]",'<span style="color:\1;">\2</span>',$msg);
echo $msg;
produziert:
<span style="color:red]text1[/color] Blabla [color=green;">text2</span>
wie kann ich den eregi_replace befehl anpassen das es auch funktioniert wenn mehrere color tags festgelegt werden?
Hi,
$msg = eregi_replace("[color=(.*)](.*)[/color]",'<span style="color:\1;">\2</span>',$msg);
wie kann ich den eregi_replace befehl anpassen das es auch funktioniert wenn mehrere color tags festgelegt werden?
Was der Befehl genau macht weiß ich nicht, aber jedenfalls sind deine Regulären Ausdrücke gierig.
(.*) sucht den längst möglichen Treffer, während (.*?) den kürztmöglichen (also den, den du willst) sucht.
mfG,
steckl
(.*) sucht den längst möglichen Treffer, während (.*?) den kürztmöglichen (also den, den du willst) sucht.
dann gibt mir php diesen fehler aus:
Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in E:\Programme\xampp\htdocs\test\rep.php on line 5
kann bei mehreren vorkommen eigentlich das ersetzen mit den variablen //1 und //2 machen oder müssten sie beim 2ten vorkommen nicht //3 und //4 sein?
kann man irgendwie tricksen das er den eregi_replace befehl einzelnt und unabhängig auf jedes vorkommen anwedet?
grüße
(.*) sucht den längst möglichen Treffer, während (.*?) den kürztmöglichen (also den, den du willst) sucht.
dann gibt mir php diesen fehler aus:
Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in E:\Programme\xampp\htdocs\test\rep.php on line 5
Ja, den Fehler habe ich auch bekommen; mir behagt die POSIX-Syntax von den ereg-Befehlen nicht, mir den Perl-kompatiblen preg-Funktionen würde es so funktioniern:
$msg = preg_replace("/[color=(.*?)](.*?)[/color]/i",'<span style="color:$1;">$2</span>',$msg);
hoppla, die postings haben sich überschnitten!
Danke vielmals jetzt funktioniert alles so wie es soll ;)
Sorry erstmal für den doppenpost!
Also: da php .*? nicht akzeptiert hab ich die andere regex funktion die den perl syntax verwendet genommen: (preg)
$msg = preg_replace('[color=(.*?)](.*?)[/color]','<span style="color:\1;">\2</span>',$msg);
das liefert das gewünschte ergebniss bist auf das ich eigentlich die beiden klammern [ und ] mit \ markieren will damit er sie bei der ausgabe weglässt...
([<span style="color:red;">text1</span>] Blabla [<span style="color:green;">text2</span>])
allerdings regt sich php dann auf:
Delimiter must not be alphanumeric or backslash
was muss ich tun?
Hi,
was muss ich tun?
'[color=(.*?)](.*?)[/color]'
Du verwendest hier die eckigen Klammern als Delimiter.
Schreibe stattdessen beispielsweise:
'%[color=(.*?)](.*?)[/color]%'
^
Ob der Backslash vor dem normalen Slash nötig ist weiß ich nicht genau.
mfG,
steckl