regular - Regex de PHP: ¿qué es "clase en offset 0"?
regex to preg_match (4)
Acabo de agregar g a la expresión regular como se sugirió en una de las torres, hizo lo contrario de lo esperado y NO filtró la puntuación, resulta que preg_replace no requiere g ya que es global / recursivo en primer lugar
Estoy tratando de quitar toda la puntuación de una cadena utilizando una expresión regular simple y la función php preg_replace, aunque me sale el siguiente error:
Compilación fallida: las clases con nombre POSIX solo se admiten dentro de una clase en el desplazamiento 0
Supongo que esto significa que no puedo utilizar clases con nombre POSIX fuera de una clase en el desplazamiento 0. Mi pregunta es, ¿qué significa cuando dice "dentro de una clase en el desplazamiento 0"?
$string = "I like: perl";
if (eregi(''[[:punct:]]'', $string))
$new = preg_replace(''[[:punct:]]'', '' '', $string); echo $new;
Las funciones preg_*
esperan expresiones regulares compatibles con Perl con delimitadores. Entonces intente esto:
preg_replace(''/[[:punct:]]/'', '' '', $string)
Una explicación de por qué está recibiendo ese error: PCRE usa la definición suelta de Perl de lo que es un delimitador. Sus []
exteriores parecen delimitadores válidos, haciendo que lea [:punct:]
como la parte de expresión regular.
(Ah, y evita las funciones ereg
si puedes, no se incluirán en PHP 5.3).
NOTA: ¡El modificador g
no es necesario con la implementación PCRE
de PHP!
Además de la respuesta de Gumbo , use el modificador g
para reemplazar todas las ocurrencias de puntuación:
preg_replace(''/[[:punct:]]/g'', '' '', $string)
// ^
De Johnathan Lonowski (ver comentarios):
> [The g modifier] means "Global" -- i.e., find all existing matches. Without it, regex functions will stop searching after the first match.