Wieso funktioniert dieses Suchmuster nicht?

Hallo,
Ich will mit der Funktion preg_replace alle Gebilde, die so aussehen: [syn]Blablala[/syn], durch einen Leerstring ersetzen.
Dazu benutze ich dieses Suchmuster:
|[syn]\w\W[syn]|

Kann mir jemand sagen, wieso dieses Muster nicht funktioniert??

Danke!
LG
froechrissi

Hallo,

versuch es doch mal so:

$var1 = preg_replace(’/[syn](.*?)[/syn]/is’, ‚‘, $var1);

Viele Grüße
Croydon

Hallo,

probiers mal so:

<?php $text = "Hier steht Text [syn]Bla Bla Bla[/syn] und hier noch mehr";
echo preg\_replace("/\[syn](.\*)\[\/syn\]/","",$text); //Ausgabe Hier steht Text und hier noch mehr ?\> Auf jeden Fall fehlte in deinem Beispiel der "/" im schließenden Tag ([/syn]). Zudem dürfte /w/W nicht so funktionieren, wie du dir das dachtest. "\[syn](.\*)\[\/syn\]/siU" könnte ggf. noch besser funktionieren, weil es u. a. die Groß-/Kleinschreibung abschaltet. Gruß, Matthias

Dazu benutze ich dieses Suchmuster:
|[syn]\w\W[syn]|

Dieses Muster matcht ja im Prinzip [syn]\w\W[syn], also [syn] gefolgt von genau einem word character (\w), gefolgt von genau einem non-word character (\W), gefolgt von [syn].

Damit das \w aber mehrere Buchstaben matcht, muss ein Quantor dahinter, was ueblicherweise * fuer „0 oder mehr“ bzw. + fuer „1 oder mehr“ ist.

Was du also vermutlich willst ist:
|[syn]\w+[syn]|

Danke dir für deine Antwort, sie hat mir sehr geholfen!!

Hi,

  1. nimm die | weg
  2. fehlt ein ein schließendes / vor dem syn
  3. \w bzw. \W gibt nur ein Zeichen an, schau mal hier: http://www.php.net/manual/de/regexp.reference.backsl…

so ist es richtig: [syn]([\w\W]*)[/syn]

Grüße,

misi

Hallo,

teste mal diesen Code:
$inhalt = preg_replace(’#[syn](.*)[/syn]#Uis’, ‚‘, $inhalt);

LG Michael