Xava: preg_replace: Rückreferenzierung klappt nicht

Hallo!

Ich will folgendes mit der Funktion "preg_replace" erreichen:

Zeichen wie ".", "?", "*", etc. sollen jeweils ein Backslash ("") vorangestellt werden.

Hierzu mein bisheriger Code:

<?php
     $string = "?";
     $search = array ("/(.)/", "/(!)/", "/(?)/", "/(\*)/", "/(+)/");
     $replace = "\$1";
     $new_string = preg_replace ($search, $replace, $string);
?>

Nur leider funktioniert es so nicht. Es wird der String "$1" anstatt von "?" zurückgegeben.

Wenn man "\$1" durch "\ $1" ersetzt, so wird der String "\ ?" zurückgegeben.

Wie muss ich die Variable "$replace" definieren, sodass "?" zurückgegeben wird?

Im PHP-Handbuch (http://de.php.net/manual/de/function.preg-replace.php) habe ich leider nichts zur Problemlösung gefunden.

  1. hi,

    $replace = "\$1";

    echo $replace;
    ausgabe? (im quelltext)

    gruß,
    wahsaga

    --
    I'll try being nicer if you'll try being smarter.
    1. Hallo wahsage!

      $replace = "\$1";

      echo $replace;
      ausgabe? (im quelltext)

      Danke!

      Folglich muss es richtig heissen:

      $replace = "\\$1";

  2. Hallo Xava,

    Ich will folgendes mit der Funktion "preg_replace" erreichen:

    Zeichen wie ".", "?", "*", etc. sollen jeweils ein Backslash ("") vorangestellt werden.

    Mit quotemeta() oder preg_quote() geht das viel einfacher.

    http://www.php.net/quotemeta
    http://www.php.net/preg-quote

    Viele Grüße
      Patrick Canterino