Hi,
habe ein kleines Problem mit preg_replace. Zur Veranschaulichung ein einfaches Beispiel
<?
$string='asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';
$string=preg_replace("/\[\[(.*)\]\]/m","||",$string);
echo $string;
?>
Ich möchte alle Textstellen, die das Muster "[[blabla]]" besitzen durch "||" ersetzten. Mein Problem ist, dass nur das erste Muster im String ersetzt wird. Das zweite wird ignoriert.
Wie kann ich es bewirken, dass der gesamte String berücksichtigt wird?
:)
hemfrie
escape [ und ]:
$string=preg_replace('/\[\[.*\]\]/Um','||',$string);
Das Forum hat das \ geschluckt. Stelle Dir oben vor jedem [ und ] ein \ vor.
Wenn ich mich nicht irre, darfst du eckige Klammern nicht einfach so verwenden:
<?
$string='asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';
$string=preg_replace("/\\[\\[(.*)\\]\\]/m","||",$string);
echo $string;
?>
Wobei es auch sein kann, dass du die Backslashes da hast, dass nur das Forum die verschluckt hat
<?
$string = 'asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';
$string = preg_replace('!\\\[\\\[(.*?)\\\]\\\]!m', '||', $string);
echo $string;
?>grrrrr :D
super Danke!
die \ hatte ich bei mir auch gehabt. Es lag am U.
Was für ein modifier ist das?
:)
hemfrie
Original geschrieben von hemfrie
Was für ein modifier ist das?
http://www.php-resource.de/tutorials/read/10/1/
abgesehen davon ist das auch ohne U möglich.... :p
oh schön, das ist mal ein übersichtliches Tutorial.
Vielen Dank für die Hilfe und ein schönes Wochenende noch.
:)
hemfrie
Original geschrieben von Abraxax
http://www.php-resource.de/tutorials/read/10/1/
Hmm, ich würde auch gerne wissen, wozu U gut ist.
Im Tutorial werden i,s und m beschrieben.
U ist für ungreedy. Normalerweise wird versucht soviel wir möglich zu matchen.
Ungreedy eben so wenig wie möglich.
@abarxas: Wie hättest Du's gelöst?
Original geschrieben von kutiku
@abarxas: Wie hättest Du's gelöst? siehe mein post... :D
?
Ohne es zu testen bin ich der Meinung, dass Dein RegExp aus "dasd[[1]]bla[[2]]dsad" auf "[[1]]bla[[2]]" matchen wird (weil eben greedy).
Aber evtl. irre ich mich auch, und dieses (.*?) bedeutet etwas ganz besonderes, denn so wie es da steht verstehe ich den Sinn leider nicht.
teste es einfach. das ? ist das ungreedy. nicht mehr und nciht weniger... und... man kann es jeweils bestimmen, wo man ungreedy haben will. mit U geht das eben nur allgemein....
dennoch ein tipp.... erst testen, dann posten/fragen.... :D