¿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.

Author: Mark Amery, 2009-10-07

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 "
// }
 229
Author: Tom Haigh,
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