Conny: preg_replace <- ändert nicht alles!

$text ='Das ist eine {test} Beitrag';

echo preg_replace('{test}', 'Richtiger', $text);

Als Ergbniss kommt:
-----------------------------------------

Das ist eine {Richtiger} Beitrag

Es sollte aber

Das ist eine Richtiger Beitrag

Ohne die Klammern kommen

Weis jemand was ich da falsch mache?

Conny

  1. Weis jemand was ich da falsch mache?

      
    <?php $text ='Das ist eine {test} Beitrag';  
    echo preg_replace('/{test}/', 'Richtiger', $text);	  
    ?>  
    
    
    1. Weis jemand was ich da falsch mache?

      <?php $text ='Das ist eine {test} Beitrag';
      echo preg_replace('/{test}/', 'Richtiger', $text);
      ?>

        
      Hallo!  
        
      Das ist natürlich richtig, aber interessant wäre ja auch eine Erklärung.  
        
      Ein Suchmuster für `preg_replace()`{:.language-php} muss in sog. [Pattern Delimiter](http://php.net/manual/de/regexp.reference.delimiters.php) (Musterbegrenzer) gepackt werden. Nach dem schließenden Begrenzer können noch eventuelle [Modifier](http://php.net/manual/de/reference.pcre.pattern.modifiers.php) angeben werden.  
        
      Meist verwendet man als Delimiter ein Zeichen, das im Suchmuster selbst nicht vorkommt, da man es sonst wieder escapen müsste um das Muster nicht vorzeitig zu beenden. Häufig verwendet: / ~ #  
        
      Aber auch Klammernpaare können als Delimiter dienen. Zitiere [manual](http://php.net/manual/de/regexp.reference.delimiters.php):  
        
      
      > It is also possible to use bracket style delimiters where the opening and closing brackets are the starting and ending delimiter, respectively. (), {}, [] and <> are all valid bracket style delimiter pairs.  
        
      Bei dem Suchmuster '{test}' werden die geschweiften Klammern als Delimiter angesehen und lediglich nach der Zeichenkette 'test' gesucht.  
        
      Schönen Abend, Robert
      
      1. Das ist natürlich richtig, aber interessant wäre ja auch eine Erklärung.

        Ich hab es nicht beantwortet weil ich es schlicht weg nicht wusste was ich darauf antworten kann. Habe nur sofort den Fehler gesehen. Bevor ich also eine falsche Antwort abgebe habe ich es einfach bleiben lassen und habe nur die Lösung gepostet.

        Dafür war deine Antwort umso umfangreicher!

  2. Hallo

    Als Ergbniss kommt:

    du meinst "Ergebnis"


    Das ist eine {Richtiger} Beitrag

    Es sollte aber

    Das ist eine Richtiger Beitrag

    wohl eher "Das ist ein richtiger Beitrag"

    Weis jemand was ich da falsch mache?

    Du hast übersehen, dass geschweifte Klammern in regulären Ausdrücken Sonderzeichen darstellen.

    Gruß
    Kalk

  3. Hi,

    Weis jemand was ich da falsch mache?

    Du nimmst reguläre Ausdrücke für etwas, was auch mit einem simplen str_replace o.ä. ginge.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/