nemo

“Para ser un pez payaso, tiene poca gracia” (Buscando a Nemo)

El otro día un amigo me dijo que al empezar a utilizar las expresiones regulares se sentía como si escribiera en chino, pero que al final si las dominas puedes ser el amo del universo de Google Analytics. Tiene toda la razón, yo desde que las utilizo necesito mucho menos tiempo para lograr recolectar los datos del análisis, casi siempre lo hago desde la API de GA, pero me sacan de determinados apuros al diseñar perfiles customizados, en la creación de objetivos o funnels, en los segmentos avanzados y en los informes cuando quiero filtrar los datos sin tener que exportarlos a Excel.

¿Qué son las expresiones regulares? En inglés RegEx. Pues son expresiones que nos permiten mediante un patrón de búsqueda con caracteres especiales contrastar un texto. Son muy útiles y cómodas para hacer filtrado y obtener unos resultados específicos. Pero como funcionan con reglas especiales, como decía al inicio, son algo complicadas, por lo menos al principio.

¿Y cuáles son estas expresiones? Explicaré las que conforman la base:

  • La barra o slash quita el comodín de los caracteres; es decir, si alguno de los caracteres que se utilizan en las expresiones regulares queremos que funcione como lo que realmente es.
  • . El punto indica comodín de un carácter. Por ejemplo, si ponemos /clinicaveterinaria/.ato valdría para filtrar por /clinicaveterinaria/pato y /clinicaveterinaria/gato
  • Ambas expresiones se utilizan juntas a menudo para quitarle al punto su carácter de comodín. Por ejemplo, clinicaveterinaria.com también determinaría clinicaveterinariascom o clinicaveterinariaIcom. Si queremos que solamente recoja clinicaveterinaria.com habría que poner clinicaveterinaria.com

  • ^ El acento cirílico indica el principio del campo. Se utiliza mucho para filtrar por determinadas IPs en un perfil para no contar con las IPs de los empleados de la empresa. Si ponemos ^90 filtraría por todas las IPs que empiecen por 90. Por ejemplo, si queremos que únicamente obtengamos resultados del subdirectorio /contacto/ deberemos indicar ^/contacto/ porque si solamente ponemos /contacto/ también cogería por ejemplo /clínica/contacto.
  • Cuando se utilizan los brackets, significa “distinto de”, por lo que si ponemos [^g]ato nos saldrá como resultado /clinicaveterinaria/pato pero no /clinicaveterinaria/gato. Este carácter ayuda también mucho en los reports de keywords, por ejemplo para coger todas las que contengan nuestra marca como primera palabra de la búsqueda: ^marca. Por ejemplo saldrían como resultado marca fútbol o marca.com o marca resultados.

  • $ El signo dólar indica final del campo, no tomará nada que contenga algún carácter después de la condición. Si quiero tomar las keywords que terminan con mi marca, filtraremos por marca$ y como resultado saldrán fútbol marca o resultados marca.
  • Si combinamos el marcador de comienzo y el marcador de final de campo, tendremos aquellas keywords que empiezan y acaban en nuestra marca: ^marca$ solamente devolverá marca.

  • ? El signo de final de interrogación indica que el carácter que va justo antes del signo puede existir o no. Se utiliza para tener controlados determinados errores ortográficos. Por ejemplo, si en el informe de keywords de mi blog pongo Gemm?a, los resultados contendrán tanto las keywords que contengan Gema como las que contienen Gemma
  • | El signo pipe, es el “O” por excelencia. Es decir, toma únicamente los contenidos que cumplan una condición u otra u otra que indiquemos en la expresión regular. Tomando el ejemplo anterior, obtendremos el mismo resultado si ponemos Gema|Gemma
  • () Los paréntesis ajustan las expresiones o símbolos a lo que hay dentro de los paréntesis. Se utiliza mucho en combinación con el signo anterior. Por ejemplo, (pre|su)fijo
  • + El signo más indica que coincide con 1 o más de los caracteres anteriores. En el ejemplo de mi nombre, Gem+a coincidirá con Gema Gemma o Gemmmmmma
  • [] Los corchetes indican coincidencia con uno de los elementos de la lista. Son muy útiles cuando, por ejemplo, tenemos un producto con diferentes versiones y solamente queremos saber los datos correspondientes a las primeras versiones, que comprenden del número 1 al 5 y no de las últimas versiones, la 6 y la 7. En el filtro pondremos [12345]
  • - El guión indica un rango. En el ejemplo anterior, obtendríamos el mismo resultado en la búsqueda de versiones si pusiéramos [1-5]
  • * El asterisco es la wildcard o comodín por excelencia, coincide con 0 o más de 1 carácter en la expresión. Es decir, si queremos recopilar todos los ficheros tipo texto del site en un informe, pondremos .*.txt$

Google Analytics en sus informes ya asume el dominio, por lo que en nuestras búsquedas o filtros solamente se necesitan aplicar a las páginas sin el dominio. Es decir, para http://www.clinicaveterinaria.com/homepage/contacto realmente es como si se accediera solamente a /homepage/contacto sin tener en cuenta lo anterior.

Con estos caracteres para expresiones regulares se puede ir al fin del mundo :) Lo interesante es combinarlos entre sí porque se nos pueden escapar de las manos ya que las expresiones regulares intentan hacer coincidir todo lo que pueden.

Por ejemplo, si tenemos páginas distintas según el país o idioma elegido por el usuario y queremos distinguir únicamente la home de cada uno de los países, habría que construir una expresión regular como esta:
^.*/.*./homepage/$
Si no ponemos el carácter de inicio ^ y de final $ la búsqueda tardará más tiempo y nos saldrán resultados que puede que no se correspondan con nuestra intención.

De esta manera, el resultado que devolverá será: /spain/homepage/ /france/homepage/ /england/homepage/ etc …

Si os interesa meteros más a fondo, aquí teneis un ebook de expresiones regulares que escribieron en lunametrics. También me gusta este tutorial.

Para probar si las expresiones regulares son correctas, en este link se pueden probar antes de utilizarlas a ver si realmente corresponden con lo que queremos seleccionar en realidad.

Para ser expresiones regulares, tienen poca gracia :)

6 comentarios a esta entrada

  • Amber el 07 Jul a las 14:56

    No te lo vas a creer, pero justo hoy he dejado por imposible entender como hacer busquedas con regex para no llevarme todo a excel y despues de leer este post me ha dado por reintentarlo y bingo.
    Muy interesantes tus posts normalmente y el de hoy me ha venido como anillo al dedo, gracias.

  • Eva el 08 Jul a las 11:10

    Mil gracias!!!!!!!!!!!! Qué hacha!!!!!!!! :DDD

  • Pau Klein el 08 Jul a las 14:28

    Gemma, me parece un post excepcional, muchas gracias por compartir el regex y por las horas que habrás dedicado. El post se va directo a delicious. :)

  • Andrés Flores el 08 Jul a las 18:20

    Hola Gemma,
    Te lo has currado. Me alegro que ya vayas a tope con las regexp.

    Cuando explicas el uso del ? y pones gem?a para hacer match con gema o gemma, debería ser gemm?a.

    Para la próxima queremos ejemplos de negación y de match greedy vs not greedy.

    Un saludo, Andrés

  • Jorgegorka el 14 Jul a las 15:23

    Hola:

    La sabiduría popular informática dice lo siguiente:

    Si intentas utilizar expresiones regulares para resolver un problema entonces tienes dos problemas.

  • Gemma Muñoz Gemma Muñoz el 14 Jul a las 23:28

    Amber, Eva, Paul

    Me alegro de haber resultado útil :)

    Andrés,

    Muchísimas gracias por el apunte, toda la razón, ya lo he arreglado! Crack! Lo de greedy y negaciones… buf, palabras mayores ;)

    Jorge/Gorka

    La sabiduría popular es SABIA, jeje. Para problemas no servirá pero para ahorrar tiempo en filtros… buf, es la caña!

    Gracias a todos por pasaros a comentar :)

Tu comentario

Nos encantaría conocer tu opinión. Por favor, procura que tus comentarios estén relacionados con esta entrada. Intenta también respetar a los demás lectores de este blog. Los comentarios off-topic, promocionales, ofensivos o ilegales serán editados y borrados.

Puedes usar algo de HTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> . Los párrafos y los retornos de línea también se incluyen automáticamente.