Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
preg_replace Problem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
preg_replace Problem


 
hemfrie
25-07-2003, 17:31 
 
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

 
kutiku
25-07-2003, 17:34 
 
escape [ und ]:

$string=preg_replace('/\[\[.*\]\]/Um','||',$string);



Das Forum hat das \ geschluckt. Stelle Dir oben vor jedem [ und ] ein \ vor.

 
Hopka
25-07-2003, 17:36 
 
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

 
Abraxax
25-07-2003, 17:36 
 
<?

$string = 'asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';

$string = preg_replace('!\\\[\\\[(.*?)\\\]\\\]!m', '||', $string);

echo $string;

?>grrrrr :D

 
hemfrie
25-07-2003, 17:38 
 
super Danke!
die \ hatte ich bei mir auch gehabt. Es lag am U.

Was für ein modifier ist das?

:)
hemfrie

 
Abraxax
25-07-2003, 17:40 
 
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

 
hemfrie
25-07-2003, 17:43 
 
oh schön, das ist mal ein übersichtliches Tutorial.
Vielen Dank für die Hilfe und ein schönes Wochenende noch.

:)
hemfrie

 
Hopka
25-07-2003, 17:44 
 
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.

 
kutiku
25-07-2003, 17:49 
 
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?

 
Abraxax
25-07-2003, 17:59 
 
Original geschrieben von kutiku
@abarxas: Wie hättest Du's gelöst? siehe mein post... :D

?

 
kutiku
25-07-2003, 21:01 
 
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.

 
Abraxax
25-07-2003, 21:06 
 
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:52 Uhr.