Funcionalidades avanzadas con las expresiones regulares

Expresión regular como jeroglífico egipcioLas expresiones regulares son un mundo muy extenso y difícil de dominar completamente. Pero a medida que van surgiendo necesidades, puedes descubrir funciones interesantes y muy útiles.

Para realizar una captura, hay que usar los paréntesis. Pero puede darse el caso en que se usen los paréntesis y no se quiera la captura, sinó que simplemente se utiliza para decir que es opcional su contenido.

Para anular la captura sería de la forma (?: )

Las capturas que hace una expresión regular, son guardadas en un array que numéricamente va añadiendo. Después tenemos que ir cogiendo los resultados según el índice numérico que ha asignado. Con la expresión regular:

(http|ftp):\/\/(?:(.*)\.)?(.*)\.(.{2,4})

en las siguentes cadenas:

http://www.softonic.jp
ftp://es.mmi.imonge.net
http://otroblogmas.com

se obtiene:

Array
(
    [0] => Array
        (
            [0] => http://www.softonic.jp
            [1] => ftp://es.mmi.imonge.net
            [2] => http://otroblogmas.com
        )
 
    [1] => Array
        (
            [0] => http
            [1] => ftp
            [2] => http
        )
 
    [2] => Array
        (
            [0] => www
            [1] => es.mmi
            [2] =>
        )
 
    [3] => Array
        (
            [0] => softonic
            [1] => imonge
            [2] => otroblogmas
        )
 
    [4] => Array
        (
            [0] => jp
            [1] => net
            [2] => com
        )
 
)

Si se quiere etiquetas las capturas hechas, se puede hacer de la forma (?’captura’ ) o (?< >). De esta manera, con la expresión:

(?'protocol'http|ftp):\/\/(?:(?'subdomain'.*)\.)?(?'domain'.*)\.(?'tld'.{2,4})

se obtiene un array más usable:

Array
(
    [0] => Array
        (
            [0] => http://www.softonic.jp
            [1] => ftp://es.mmi.imonge.net
            [2] => http://otroblogmas.com
        )
 
    [protocol] => Array
        (
            [0] => http
            [1] => ftp
            [2] => http
        )
 
    [1] => Array
        (
            [0] => http
            [1] => ftp
            [2] => http
        )
 
    [subdomain] => Array
        (
            [0] => www
            [1] => es.mmi
            [2] =>
        )
 
    [2] => Array
        (
            [0] => www
            [1] => es.mmi
            [2] =>
        )
 
    [domain] => Array
        (
            [0] => softonic
            [1] => imonge
            [2] => otroblogmas
        )
 
    [3] => Array
        (
            [0] => softonic
            [1] => imonge
            [2] => otroblogmas
        )
 
    [tld] => Array
        (
            [0] => jp
            [1] => net
            [2] => com
        )
 
    [4] => Array
        (
            [0] => jp
            [1] => net
            [2] => com
        )
 
)

Para añadir un comentario en la expresión regular, se puede hacer de dos manera:

  • Añadir el comentario en medio de la expresión regular con la forma (?#comentario).
  • Usar el modo free-spacing para hacer la expresión regular en varias líneas, y poder añadir comentarios. Para activar el modo free-spacing, hay que añadir la “x” al final. De esta manera los espacios ( espacios, tabuladores y saltos de línea) son ignorados, excepto en los grupos. Si encuentra una almohadilla, todo lo siguiente lo considera un comentario. Mejor un ejemplo:
    $regexExpr = "/
    	# Match a 20th or 21st century date in yyyy-mm-dd format
    	(19|20)\d\d                # year (group 1)
    	[- /.]                     # separator
    	(0[1-9]|1[012])            # month (group 2)
    	[- /.]                     # separator
    	(0[1-9]|[12][0-9]|3[01])   # day (group 3)
    /x";

    Para determinar un espacio a ser buscado, se puede hacer “\ “, “\s” o “\x20″.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>