To prevent any problems, try to always use a delimiter that will *almost* not be used inside the regex, such as ` (back quote)
for example: instead of
<?php preg_match('/foo\/bar\//',$somevar); ?>
use
<?php preg_match('`foo/bar/`',$somevar); ?>
it's that simple! like this, you won't have to bother with delimiters anymore...
preg_quote
(PHP 4, PHP 5)
preg_quote — Maskiert Zeichen regulärer Ausdrücke
Beschreibung
preg_quote() setzt einen Backslash vor jedes Zeichen von Zeichenkette , das zur Syntax eines regulären Ausdrucks gehört. Das ist nützlich, wenn Sie einen Text nach Übereinstimmungen mit einer zur Laufzeit erzeugten Zeichenkette durchsuchen müssen, die spezielle RegEx-Zeichen enthalten könnte.
Spezielle Zeichen regulärer Ausdrücke sind: . \ + * ? [ ^ ] $ ( ) { } = ! < > | :
Parameter-Liste
- Zeichenkette
-
Die zu durchsuchende Zeichenkette
- Begrenzer
-
Falls der optionale Begrenzer angegeben wurde, wird dieser ebenfalls maskiert. Das ist nützlich, um den Begrenzer zu maskieren, der von den PCRE-Funktionen benötigt wird. Der / ist der am häufigsten verwendete Begrenzer.
Rückgabewerte
Gibt die maskierte Zeichenkette zurück.
Beispiele
Beispiel #1 preg_quote() Beispiel
<?php
$schluesselwoerter = '$40 für einen G3/400';
$schluesselwoerter = preg_quote($schluesselwoerter, '/');
echo $schluesselwoerter; // liefert \$40 für einen G3\/400
?>
Beispiel #2 Kursivdruck eines Wortes in einem Text
<?php
// In diesem Beispiel wird preg_quote($wort) verwendet, damit die
// Asterisks (*) für den regulären Ausdruck keine spezielle Bedeutung haben.
$text = "Dieses Buch ist *sehr* schwer zu finden.";
$wort = "*sehr*";
$text = preg_replace ("/" . preg_quote($wort) . "/",
"<i>" . $wort . "</i>",
$text);
?>
Anmerkungen
Hinweis: Diese Funktion ist binary safe.
preg_quote
30-Jul-2008 06:10
27-Dec-2007 12:13
Wondering why your preg_replace fails, even if you have used preg_quote?
Try adding the delimiter / - preg_quote($string, '/');
