2010-06-29 12 views
15

estoy buscando palabras clave en una cadena a través de una expresión regular. Funciona bien para todas las palabras clave, excepto una que contiene una barra inclinada: "hora/emitir".expresión regular y barra diagonal

Incluso utilizando preg_quote($find,'/'), que escapa a ella, sigo teniendo el mensaje:

Unknown modifier 't' in /frontend.functions.php on line 71 

Si i imprimir el patrón de descubrimiento, que muestra /time\\/emit/. Sin preg_quote, muestra /time/emit/ y ambos devuelven el mismo mensaje de error.

Cualquier conocimiento sería útil.

Respuesta

31

Trate de comenzar y terminar su expresión regular con distinto signo que/

Yo personalmente uso `

He visto a gente usando #

Creo que la mayoría de los caracteres son buenas. Puede leer más sobre esto aquí: http://pl.php.net/manual/en/regexp.reference.delimiters.php

De esta manera:

preg_match('#time/emit#', $subject); // instead of /time/emit/ 

para decirlo de otra manera: La variable de $find debe contener en lugar # tiempo/emiten # de/hora/emiten/

+0

la garrapata hacia atrás hizo el truco! – pixeline

+0

Solución elegante que resolvió todos mis dolores de cabeza con el personaje de barra. – Seth

0

bit of code?

el 'regex' para ese término en particular debería verse como '/ time/emit /'. Con un conjunto de palabras clave puede haber un método más eficiente, por lo que ver lo que estás haciendo sería bueno.

2

ya se ve que tienes algo que escapa ..

preg_quote('time/emit') // returns time\/emit 
preg_quote('time\/emit') // returns time\\/emit 

como un truco que podría simplemente hacer:

preg_quote(stripslashes($find)) // will return time\/emit 
0

esto debería funcionar:

$a="Hello////////"; 
$b=str_replace($a,"//","/"); 
echo $b; 
Cuestiones relacionadas