PHP
Von: FR_ОЕ_СΗ, 29.5.2010 12:10 Uhr
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



  1. Antwort von Αnоnүm (abgemeldet) 2
    Re: Wieso funktioniert dieses Suchmuster nicht??
    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\]|
    1 Kommentare
    • Re^2: Wieso funktioniert dieses Suchmuster nicht??
      Danke dir für deine Antwort, sie hat mir sehr geholfen!!
  2. Antwort von Сrоүdоn 0
    Re: Wieso funktioniert dieses Suchmuster nicht??
    Hallo,

    versuch es doch mal so:


    $var1 = preg_replace('/\[syn\](.*?)\[\/syn\]/is', '', $var1);


    Viele Grüße
    Croydon
    • Antwort von Μаttһіаѕ 0
      Re: Wieso funktioniert dieses Suchmuster nicht??
      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
      • Antwort von mіѕі 0
        Re: Wieso funktioniert dieses Suchmuster nicht??
        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