¿Hay una función PHP que pueda escapar de patrones regex antes de que se apliquen?
¿Hay una función PHP que pueda escapar de patrones de expresiones regulares antes de que se apliquen?
Estoy buscando algo en la línea de la C# Regex.Escape()
función.
1 answers
preg_quote()
es lo que está buscando:
Descripción
string preg_quote ( string $str [, string $delimiter = NULL ] )
Preg_quote() toma
str
y pone un barra invertida delante de cada personaje que es parte de la expresión regular sintaxis. Esto es útil si usted tiene un cadena de tiempo de ejecución que necesita para coincidir en algún texto y la cadena puede contiene caracteres especiales de expresiones regulares.La expresión regular especial los caracteres son:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
Parámetros
Str
La cadena de entrada.
Delimitador
Si se especifica el delimitador opcional, también se escapará. Esto es útil para escapar del delimitador requerido por las funciones PCRE. El / es el delimitador más utilizado.
Es importante tener en cuenta que si el argumento $delimiter
no se especifica, el delimitador - el carácter utilizado para encerrar su expresión regular, comúnmente una barra diagonal (/
) - no se escapará. Normalmente querrá pasar cualquier delimitador que esté utilizando con su expresión regular como argumento $delimiter
.
Ejemplo-usando preg_match
para encontrar ocurrencias de una URL dada rodeada de espacios en blanco:
$url = 'http://stackoverflow.com/questions?sort=newest';
// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');
// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now: /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);
var_dump($matches);
// array(1) {
// [0]=>
// string(48) " http://stackoverflow.com/questions?sort=newest "
// }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-21 23:00:58