Ya hemos hablado acerca del poder de las expresiones regulares en la programación. Sin embargo, extraer información de una cadena con expresiones regulares puede ser un tanto complicado a la hora de navegar por los Ãndices del array generado.
Para solucionar este problema, varios lenguajes implementaron los tags en las expresiones regulares. Estos tags permiten al desarrollador organizar el array de salida en una cadena de coincidencias.
Para ejemplificar este mini tutorial, utilizaré la función preg_match_all() de php, ya que es la que mayormente uso en este tipo de casos. Los que usan python por ejemplo, podrán usar la misma expresión en la función re.findall().
Manos a la obra
Imaginemos por un momento que queremos obtener diferente información de una url y queremos extraer por un lado el protocolo, por otro lado ver si tiene las www, por otro el dominio propiamente dicho y por el otro lado el request.
Si usáramos una expresión regular común, con preg_match_all() que busca todas las coincidencias posibles y las guarda en un array indexado, se nos harÃa difÃcil calcular antes de ver el array en que posición está la información que necesitamos.
Por ejemplo:
preg_match_all ('/(.+://)(www.)?([^/]+)(.*)/', 'http://www.google.com.ar/search?q=elezeta', $array);
Nos dará como resultado un engorroso $array que estará compuesto por varios Ãndices en donde cada uno de esos Ãndices son las coincidencias que la función detectó y para utilizar esta información, tenemos primero que ver como es el array y después llamar al Ãndice que nos interesa.
En cambio, usando los tags, podemos decirle que además de crear el array indexado, nos agregue Ãndices asociativos con los tags de nuestra información.
El mismo ejemplo con tags:
preg_match_all ('/(?P<protocolo>.+://)(?P<w>www.)?(?P<dominio>[^/]+)(?P<query>.*)/', 'http://www.google.com.ar/search?q=elezeta', $array);
De esta forma sabemos que:
$array['protocolo']: va a tener el protocolo "http://".
$array['w']: va a tener si usa www "www", si no usa, va a ser nulo.
$array['dominio']: va a tener el dominio: "google.com.ar".
$array['query']: va a tener todo el resto.
Como verán es muy simple el uso de tags en las expresiones regulares en lenguajes que lo soportan. Tan sólo agreguen ?P<tagname> delante del grupo de coinsidencia y la función se encargará del resto.
Esto surge de una charla que tuvimos con MatÃas acerca de las virtudes de las expresiones regulares en PHP y en Python.
Entonces, para hacer referencia al valor de “resultado” desde la ventana hija tenemos 4 instancias: 



