regulares probar preg_replace preg_match lista expresiones especiales ejemplos caracteres php regex

probar - Delimitador de expresiones regulares PHP, ¿cuál es el punto?



preg_replace php ejemplos (3)

¿Por qué las expresiones regulares de PHP tienen los delimitadores circundantes? Parece que sería más claro si se pasara algún modificador de patrón como parámetro a cualquier función que se estuviera usando.


La razón para el delimitador es poner banderas después del patrón. Podría decirse que las banderas podrían pasarse como un parámetro separado (Java puede hacerlo de esta manera) pero así es como Perl lo hizo originalmente (y sed / awk / vi antes), así es como se hace ahora.

No use barras diagonales: son demasiado comunes. Personalmente, casi siempre uso el! personaje. Casi nunca estoy buscando eso.


No sé cuáles fueron los motivos de los desarrolladores de las funciones de preg. La única razón por la que puedo pensar es que trataron un poco demasiado duro para hacer las cosas al estilo Perl.

Si bien los delimitadores permiten especificar indicadores junto con la expresión regular como un parámetro, especificar los indicadores como un parámetro separado es mucho más claro. Así es como cada otra biblioteca de expresiones regulares (para lenguajes que no admiten expresiones regulares literales como característica de idioma) sé que lo hace, incluida la biblioteca PCRE en la que se basan las funciones de preg de PHP. El código de preg de hecho tiene que pasar por la dificultad de eliminar los delimitadores de expresiones regulares de la cadena con su expresión regular antes de que pueda pasar a PCRE.


No hay una razón técnica por la cual tiene que ser así.

Como se señala en un comentario, la biblioteca subyacente no requiere que los indicadores se pasen como parte de la expresión regular - de hecho, la extensión tiene que eliminarlos y pasarlos como un argumento separado.

Parece que el implementador original intentaba hacer que se viera como grep / sed / awk / perl / etc, por lo que es más familiar para los programadores que provienen de esas herramientas.