Dominar expresiones regulares en PHP
| by Dennis Pallett | March 28, 2005
¿Cuáles son expresiones regulares?
Una expresión regular es un patrón que puede emparejar varias secuencias de texto. Usando expresiones regulares puedes encontrar (y substituir) ciertos patrones del texto, por ejemplo “todas las palabras que comienzan con la letra A” o “encuentran solamente números de teléfono”. Las expresiones regulares son de uso frecuente en clases de la validación, porque son una herramienta realmente de gran alcance para verificar direcciones del E-mail, números de teléfono, direcciones de la calle, códigos postales, y más.
En esta clase particular te demostraré cómo las expresiones regulares trabajan en PHP, y te doy una introducción corta en escribir tus propias expresiones regulares. También te daré vario ejemplo las expresiones regulares que son de uso frecuente.
Expresiones regulares en PHP
Usar el regex (expresiones regulares) es realmente fácil en PHP, y allí es varias funciones que existen para hacer el regex que encuentra y que substituye. Comencemos con un hallazgo simple del regex.
Tener una mirada en la documentación de la función del preg_match (http://php.net/preg_match). Como puedes ver de la documentación, el preg_match se utiliza para realizar una expresión regular. En este caso no se hace el ningún substituir, sólo un hallazgo simple. ¿Copy el código abajo para darte un try.<? el ejemplo de php//string$str = “nos dejó encontrar < bla > de la materia entre </bla> estos dos soportes anteriores”; /realicemos regex$do = el preg_match (”/<bla> (. *) < /bla>/“, $str, $matches); /el cheque si el regex era successfulif ($do = verdad) {// emparejó algo, demuestra los htmlentities emparejados del eco de la secuencia ($matches [“0”]); // también cómo el texto entre las etiquetas repite el “<br/>”. $matches [“1”];} {// ningún eco del fósforo “no podría encontrar un fósforo”;}¿? >
Después funcionando el código, es probablemente una buena idea si hago un funcionamiento rápido con el código. Básicamente, la base entera del código antedicho es la línea que contiene el preg_match. La primera discusión es tu patrón del regex. Esto es probablemente el más importante. Más tarde en esta clase particular, explicaré algunas expresiones regulares básicas, pero si realmente deseas aprender la expresión regular entonces es la mejor si miras en Google para los ejemplos regulares específicos de la expresión.
La segunda discusión es la cadena sujeto. Asumo que no necesita ningún explicar. Finalmente, la tercera discusión puede ser opcional, pero si deseas conseguir el texto emparejado, o el texto entre algo, él es una buena idea de utilizarla (apenas como la utilicé en el ejemplo).
La función del preg_match para después de que haya encontrado el primer fósforo. Si deseas encontrar TODOS LOS fósforos en una secuencia, necesitas utilizar la función del preg_match_all (http://www.php.net/preg_match_all). Ese trabaja bastante mucho el igual, tan allí no es ninguna necesidad de explicarla por separado.
Ahora que hemos tenido encontrar, nos dejamos hacer un encontrar-y-substituir, con la función del preg_replace (http://www.php.net/preg_replace). La función del preg_replace trabaja bastante similar a la función del preg_match, sino que por el contrario hay otra discusión para la secuencia del reemplazo. ¿Copy el código abajo, e it.< funcionado? el ejemplo de php//string$str = “nos dejó substituir el <bla>stuff between</bla> que el bla acorcheta”; /hacer el preg replace$result = el preg_replace (”/<bla> (. *) < /bla>/“, “<bla>new stuff</bla>”, $str); ¿htmlentities del eco ($result);? >
El resultado entonces sería la misma secuencia, a menos que ahora dijera la “materia nueva” entre las etiquetas del bla. Esto es por supuesto apenas un ejemplo simple, y reemplazos más avanzados pueden ser hechos.
Puedes también utilizar llaves en la secuencia del reemplazo. ¿Decir que todavía deseas el texto entre los soportes, y apenas que agregas algo? Utilizas los $1, los $2, las llaves del etc para ésas. Por ejemplo: ¿<? el ejemplo de php//string$str = “nos dejó substituir el <bla>stuff between</bla> que el bla acorcheta”; /hacer el preg replace$result = el preg_replace (”/<bla> (. *) < /bla>/“, “materia del <bla>new (el viejo: $1) </bla>”, $str); ¿htmlentities del eco ($result);? >
Esto entonces imprimiría “nos dejó substituir la materia nueva (el viejo: materia en medio) que el bla acorcheta”. $2 es para el segundo “coger-todo”, $3 para el tercero, el etc.
Eso está sobre él para las expresiones regulares. Se parece muy difícil, pero una vez que agarres es extremadamente fácil con todo una de las herramientas más de gran alcance al programar en PHP. No puedo contar el número de épocas que el regex me ha ahorrado a partir de horas de las funciones difíciles del texto de la codificación.
Un ejemplo
¿Cuáles una buena clase particular sería sin algunos ejemplos verdaderos? Primero tengamos una mirada en una función simple de la validación del E-mail. Una dirección del E-mail debe comenzar con las letras o los números, entonces tienen @, entonces un dominio, terminando con una extensión. El regex para ése sería algo similar: ^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$
Dejarme rápidamente explicar ese regex. Básicamente, la primera parte dice que debe todo ser letras o números. Entonces conseguimos @, y después ése allí debe ser letras y/o números otra vez (el dominio). Finalmente comprobamos por un período, y entonces para saber si hay una extensión. El código para utilizar este regex parece esto: ¿<? php//bueno e-mail$good = “john@example.com”; /malo e-mail$bad = “blabla@blabla”; /comprobemos el buen e-mailif (preg_match (”/^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $good)) {eco “E-mail válido”;} {eco “E-mail inválido”;}eco “<br/>”; /y comprobar el mal e-mailif (preg_match (”/^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $bad)) {eco “E-mail válido”;} {eco “E-mail inválido”;}¿? >
El resultado de esto sería “E-mail válido. E-mail inválido”, por supuesto. Acabamos de comprobar si una dirección del E-mail es válida. Si envuelves el código antedicho en una función, te tienes una función de la validación del E-mail. Tener presente sin embargo que el regex no es perfecto: ¿después de todo, no comprueba si la extensión sea demasiado larga, él? Porque deseo guardar este cortocircuito preceptoral, no daré el regex hecho y derecho, pero puedes encontrarlo fácilmente vía Google.
Otro ejemplo
Otro gran ejemplo sería un número de teléfono. Opinión que deseas verificar que los números de teléfono y cerciorarse de ellos estuviera en el formato correcto. Asumámoste quisieran que los números estuvieran en el formato del xxx-xxxxxxx. El código miraría algo similar: ¿<? php//bueno number$good = “123-4567890”; /malo number$bad = “45-3423423”; /dejar nosotros comprobar bueno numberif (preg_match (”/ d {3} - d {7}/“, $good)) {eco “número válido”;} {eco “número inválido”;}eco “<br/>”; /y comprueban malo numberif (preg_match (”/ d {3} - d {7}/“, $bad)) {eco “número válido”;} {eco “número inválido”;}¿? >
El regex es bastante simple, porque nosotros utilizan D. Esto significa básicamente el “fósforo cualquier dígito” con la longitud detrás de él. En este ejemplo primero busca 3 dígitos, entonces “-” (guión) y finalmente 7 dígitos. Trabaja perfectamente, y hace exactamente qué deseamos.
¿Cuál es exactamente posible con expresiones regulares?
Las expresiones regulares son realmente una de las herramientas más de gran alcance de PHP, o cualquier otra lengua para esa materia (puedes utilizarla en tus reglas del mod_rewrite también!). Hay tanto tú puede hacer con el regex, y hemos rasguñado solamente la superficie en esta clase particular con algunos ejemplos muy básicos.
Si realmente deseas cavarme en regex sugerirte búsqueda en Google para más clases particulares, y el intento para aprender el sintaxis del regex. No es fácil, y hay absolutamente una curva que aprende escarpada (en mi opinión), pero la mejor manera de aprender es pasar con muchos de ejemplos, e intenta traducirlos en inglés llano. Realmente las ayudas tú aprende el sintaxis.
En el futuro dedicaré un artículo completo terminantemente a los ejemplos, incluyendo los más avanzados, sin ninguna explicación. Pero para ahora, puedo solamente darte acoplamientos a otras clases particulares:
La clase particular minuciosa de 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Una expresión regular es un patrón que puede emparejar varias secuencias de texto. Usando expresiones regulares puedes encontrar (y substituir) ciertos patrones del texto, por ejemplo “todas las palabras que comienzan con la letra A” o “encuentran solamente números de teléfono”. Las expresiones regulares son de uso frecuente en clases de la validación, porque son una herramienta realmente de gran alcance para verificar direcciones del E-mail, números de teléfono, direcciones de la calle, códigos postales, y más.
En esta clase particular te demostraré cómo las expresiones regulares trabajan en PHP, y te doy una introducción corta en escribir tus propias expresiones regulares. También te daré vario ejemplo las expresiones regulares que son de uso frecuente.
Expresiones regulares en PHP
Usar el regex (expresiones regulares) es realmente fácil en PHP, y allí es varias funciones que existen para hacer el regex que encuentra y que substituye. Comencemos con un hallazgo simple del regex.
Tener una mirada en la documentación de la función del preg_match (http://php.net/preg_match). Como puedes ver de la documentación, el preg_match se utiliza para realizar una expresión regular. En este caso no se hace el ningún substituir, sólo un hallazgo simple. ¿Copy el código abajo para darte un try.<? el ejemplo de php//string$str = “nos dejó encontrar < bla > de la materia entre </bla> estos dos soportes anteriores”; /realicemos regex$do = el preg_match (”/<bla> (. *) < /bla>/“, $str, $matches); /el cheque si el regex era successfulif ($do = verdad) {// emparejó algo, demuestra los htmlentities emparejados del eco de la secuencia ($matches [“0”]); // también cómo el texto entre las etiquetas repite el “<br/>”. $matches [“1”];} {// ningún eco del fósforo “no podría encontrar un fósforo”;}¿? >
Después funcionando el código, es probablemente una buena idea si hago un funcionamiento rápido con el código. Básicamente, la base entera del código antedicho es la línea que contiene el preg_match. La primera discusión es tu patrón del regex. Esto es probablemente el más importante. Más tarde en esta clase particular, explicaré algunas expresiones regulares básicas, pero si realmente deseas aprender la expresión regular entonces es la mejor si miras en Google para los ejemplos regulares específicos de la expresión.
La segunda discusión es la cadena sujeto. Asumo que no necesita ningún explicar. Finalmente, la tercera discusión puede ser opcional, pero si deseas conseguir el texto emparejado, o el texto entre algo, él es una buena idea de utilizarla (apenas como la utilicé en el ejemplo).
La función del preg_match para después de que haya encontrado el primer fósforo. Si deseas encontrar TODOS LOS fósforos en una secuencia, necesitas utilizar la función del preg_match_all (http://www.php.net/preg_match_all). Ese trabaja bastante mucho el igual, tan allí no es ninguna necesidad de explicarla por separado.
Ahora que hemos tenido encontrar, nos dejamos hacer un encontrar-y-substituir, con la función del preg_replace (http://www.php.net/preg_replace). La función del preg_replace trabaja bastante similar a la función del preg_match, sino que por el contrario hay otra discusión para la secuencia del reemplazo. ¿Copy el código abajo, e it.< funcionado? el ejemplo de php//string$str = “nos dejó substituir el <bla>stuff between</bla> que el bla acorcheta”; /hacer el preg replace$result = el preg_replace (”/<bla> (. *) < /bla>/“, “<bla>new stuff</bla>”, $str); ¿htmlentities del eco ($result);? >
El resultado entonces sería la misma secuencia, a menos que ahora dijera la “materia nueva” entre las etiquetas del bla. Esto es por supuesto apenas un ejemplo simple, y reemplazos más avanzados pueden ser hechos.
Puedes también utilizar llaves en la secuencia del reemplazo. ¿Decir que todavía deseas el texto entre los soportes, y apenas que agregas algo? Utilizas los $1, los $2, las llaves del etc para ésas. Por ejemplo: ¿<? el ejemplo de php//string$str = “nos dejó substituir el <bla>stuff between</bla> que el bla acorcheta”; /hacer el preg replace$result = el preg_replace (”/<bla> (. *) < /bla>/“, “materia del <bla>new (el viejo: $1) </bla>”, $str); ¿htmlentities del eco ($result);? >
Esto entonces imprimiría “nos dejó substituir la materia nueva (el viejo: materia en medio) que el bla acorcheta”. $2 es para el segundo “coger-todo”, $3 para el tercero, el etc.
Eso está sobre él para las expresiones regulares. Se parece muy difícil, pero una vez que agarres es extremadamente fácil con todo una de las herramientas más de gran alcance al programar en PHP. No puedo contar el número de épocas que el regex me ha ahorrado a partir de horas de las funciones difíciles del texto de la codificación.
Un ejemplo
¿Cuáles una buena clase particular sería sin algunos ejemplos verdaderos? Primero tengamos una mirada en una función simple de la validación del E-mail. Una dirección del E-mail debe comenzar con las letras o los números, entonces tienen @, entonces un dominio, terminando con una extensión. El regex para ése sería algo similar: ^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$
Dejarme rápidamente explicar ese regex. Básicamente, la primera parte dice que debe todo ser letras o números. Entonces conseguimos @, y después ése allí debe ser letras y/o números otra vez (el dominio). Finalmente comprobamos por un período, y entonces para saber si hay una extensión. El código para utilizar este regex parece esto: ¿<? php//bueno e-mail$good = “john@example.com”; /malo e-mail$bad = “blabla@blabla”; /comprobemos el buen e-mailif (preg_match (”/^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $good)) {eco “E-mail válido”;} {eco “E-mail inválido”;}eco “<br/>”; /y comprobar el mal e-mailif (preg_match (”/^ [a-zA-Z0-9_ . -] + . de +@ [a-zA-Z0-9 -][a-zA-Z0-9 - .]+$/“, $bad)) {eco “E-mail válido”;} {eco “E-mail inválido”;}¿? >
El resultado de esto sería “E-mail válido. E-mail inválido”, por supuesto. Acabamos de comprobar si una dirección del E-mail es válida. Si envuelves el código antedicho en una función, te tienes una función de la validación del E-mail. Tener presente sin embargo que el regex no es perfecto: ¿después de todo, no comprueba si la extensión sea demasiado larga, él? Porque deseo guardar este cortocircuito preceptoral, no daré el regex hecho y derecho, pero puedes encontrarlo fácilmente vía Google.
Otro ejemplo
Otro gran ejemplo sería un número de teléfono. Opinión que deseas verificar que los números de teléfono y cerciorarse de ellos estuviera en el formato correcto. Asumámoste quisieran que los números estuvieran en el formato del xxx-xxxxxxx. El código miraría algo similar: ¿<? php//bueno number$good = “123-4567890”; /malo number$bad = “45-3423423”; /dejar nosotros comprobar bueno numberif (preg_match (”/ d {3} - d {7}/“, $good)) {eco “número válido”;} {eco “número inválido”;}eco “<br/>”; /y comprueban malo numberif (preg_match (”/ d {3} - d {7}/“, $bad)) {eco “número válido”;} {eco “número inválido”;}¿? >
El regex es bastante simple, porque nosotros utilizan D. Esto significa básicamente el “fósforo cualquier dígito” con la longitud detrás de él. En este ejemplo primero busca 3 dígitos, entonces “-” (guión) y finalmente 7 dígitos. Trabaja perfectamente, y hace exactamente qué deseamos.
¿Cuál es exactamente posible con expresiones regulares?
Las expresiones regulares son realmente una de las herramientas más de gran alcance de PHP, o cualquier otra lengua para esa materia (puedes utilizarla en tus reglas del mod_rewrite también!). Hay tanto tú puede hacer con el regex, y hemos rasguñado solamente la superficie en esta clase particular con algunos ejemplos muy básicos.
Si realmente deseas cavarme en regex sugerirte búsqueda en Google para más clases particulares, y el intento para aprender el sintaxis del regex. No es fácil, y hay absolutamente una curva que aprende escarpada (en mi opinión), pero la mejor manera de aprender es pasar con muchos de ejemplos, e intenta traducirlos en inglés llano. Realmente las ayudas tú aprende el sintaxis.
En el futuro dedicaré un artículo completo terminantemente a los ejemplos, incluyendo los más avanzados, sin ninguna explicación. Pero para ahora, puedo solamente darte acoplamientos a otras clases particulares:
La clase particular minuciosa de 30 Regex (http://www.codeproject.com/dotnet/RegexTutorial.asp)
Regular-Expressions.info (http://www.regular-expressions.info/)
Article Source: http://www.articleset.com

You are welcome to publish or reprint this article free of charge, provided:
- you include the entire article, unchanged, including the "About The Author" box
- all hyperlinks remain active, including the bottom ArticleSet.com link (does not apply to print publications)
- you agree not to hold the authors nor ArticleSet.com liable for any loss profits, expenses, or any other damages resulting from the use or misuse of articles published on this website