validate regular preg_match_all preg_match matches ejemplos php regex

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;



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.