31 Ago 2016
Expresiones regulares: Aprende con Aukera marketing
Lectura: 17 mins.
|
Dificultad:

Aprende Expresiones Regulares con Aukera

 


INTRODUCCIÓN A LAS EXPRESIONES REGULARES

Una expresión regular, a menudo llamada también regEx o RegExp, es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.

Fuente: Wikipedia

Las expresiones regulares se utilizan frecuentemente en lenguajes de programación para identificar, extraer, o localizar partes de texto y/o código relevantes. Consisten en una serie de caracteres a los que se les otorga un significado especial y que funcionan en cierto modo, como comodín para capturar los tipos de datos deseados.

Se trata por tanto de una especie de “lenguaje/alfabeto/idioma” que utilizamos en algunos entornos y herramientas digitales y en otros lenguajes de programación.

Existen ciertos caracteres especiales que están dotados de significado y son ideales para poder realizar búsquedas avanzadas en archivos de texto/código. Es similar a este tipo de búsquedas donde podemos concretar ciertas cosas.

Búsqueda avanzada de imágenes en Google

En realidad, se trata de hacer una especie de “búsqueda avanzada“, basada en la aparición-no aparición de ciertos caracteres concretos, su posición, etc. Un filtrado similar a lo resaltado en azul, relativo a búsqueda de texto. Rápido y versátil. Existen una serie de caracteres especiales y patrones con los que se pueden hacer consultas complejas rellenando una caja de búsqueda o campo de filtro con la combinación adecuada de caracteres de expresión regular. Ej.  (1|2|3)OMGd{3,4}$

Ej. Por poner un ejemplo muy sencillo: Si queremos localizar todo lo que termine en la letra O, pondremos:

O$

Aprovechando que el dólar $ indica siempre el final de la cadena o linea de texto a examinar.

 

Usamos expresiones regulares frecuentemente en Google Analytics, muchas veces como alternativa al  tipo de coincidencia “contiene”, en los menús o filtros donde no existe dicha opción. Esto ocurre por ejemplo en los filtros opcionales de los informes  personalizados de Analytics, como no se ofrece la comparación de tipo “Contiene”, aquí utilizaremos la de “Expresión regular” en su lugar:

Filtros de busqueda en Google Analytics

 


PRINCIPALES CARACTERES EN EXPRESIONES REGULARES

1. Principales expresiones regulares y su significado:

Estos son algunos de los caracteres regEx más utilizados (caracteres que debemos “escapar” anteponiendo la contrabarra () si queremos que utilicen su significado habitual). Hay muchos listados y recopilaciones en internet o cheat sheets, aquí solo vemos algunos, de lo más sencillo a lo más complejo.

.
Cualquier carácter (menos salto de línea).
|
OR. Ej. (a|b) = a o b. Este es el carácter más común que vas a usar muchas veces. Cuidado con nunca dejar la barra vertical al final de una regEx, pues ello significa la inclusión de todo. Se pueden encadenar múltiples opciones  (ej: a|b|c) y también se puede anidar un OR dentro de otro. Por ej. (A(1|2|3)|B(4|5|6))|OtraCosa.
^
Que empiece por. Ej. ^www. (que empiece por “www.”).
$
Que termine por. Ej. /$ (que termine con la barra de directorio)
/
En lenguajes de programación indica el principio y el final de una expresión regular, por ello en el ejemplo anterior hemos “escapado” la barra. En Analytics y GTM no está de más hacer esto y escapar la barra, aunque no es imprescindible. La interpretación de regEx puede estar simplificada dentro de algunas herramientas como las indicadas.
s
Espacio en blanco. Ideal cuando necesitamos buscar por ejemplo una palabra completa en un título de GA.
S
NO espacio en blanco. Cualquier carácter excepto un espacio, tabulador, salto de linea…
w
Cualquier carácter alfanumérico o guión bajo (“_”). Por ejemplo, wt.com valdría para At.com, bt.com, 3t.com… cualquier cosa que contenga t.com forzando que delante de la t haya una letra, un número o un guión bajo.
W
Cualquier carácter NO alfanumérico ni guión bajo, muy útil cuando queremos evitar la búsqueda de tipo “contiene” en búsquedas de cadenas de texto alfanumérico. Por ej. si ponemos una regEx con W al principio y al final (WmibusquedaW), haremos búsqueda de una palabra o cifra concreta, sin que se le pueda añadir otro carácter alfanumérico o guión delante o detrás. Ej. (W|^)t.co de este modo nos aseguraremos capturar el dominio “t.co” sin nada delante o al menos sin otro carácter delante que pueda cambiar el significado de la búsqueda.
b
Para separación de palabra, inicio o final de palabra. Como el de antes, pero no representa ningún carácter sino solo justo el principio o el final de la palabra.
d
Un dígito numérico. Ej. d{9} == un número de 9 dígitos.
D
Un no dígito. Ej. d{3}D == un número de 3 cifras seguido de otro carácter no numérico. Ej. 250px.

 

2. Comodines: grupos y rangos en regEx

Representan a un grupo de caracteres – puede ser desordenado: ej. a, e, i, o, u -> (a|e|i|o|u) == [aeiou] – o un rango de caracteres – ordenado: ej. del 1 al 7 -> [1-7] -.

[abc]
a, b o c. Ej. [xyz] un carácter que sea x, y o z.Todo lo que incluyamos dentro de corchetes representará a un único carácter.
También podemos intercalarlo en una expresión regular más larga. Ej. pat[oa] coincidirá con pato y pata.
[a-z]
Cualquier letra de la a a la z (minúsculas). Otros ejs.: [a-m] de la a a la m.
[A-Z]
Cualquier letra de la A a la Z (mayúsculas). Otros ejs.: [N-Z] de la N a la Z.
[a-zA-Z]
Cualquier letra de la A a la Z (mayúsculas o minúsculas).
[0-9]
Cualquier número del 0 al 9. Otro ej: [1-3]. No confundir con {1,3} que es el número de repeticiones de otro carácter, no el carácter numérico en sí mismo.
[a-zA-Z0-9]
Cualquier carácter alfanumérico.
[a-zA-Z0-9-]
Cualquier carácter alfanumérico, incluyendo el guión medio.
[^…]
Poniendo ^ al principio del grupo o rango conseguimos el efecto contrario, excluir determinados caracteres. Ej: [^s] = cualquier caracter excepto una “s”. [^A-Z] = cualquier carácter excepto una letra mayúscula
[rango]
Por defecto todo lo que va dentro del rango corresponde a un único carácter. Salvo que le añadamos un cuantificador indicando lo contrario, como a cualquier otro elemento.
(grupo)
Los paréntesis crean un grupo – de uno o varios caracteres – dentro del cual podemos definir otro tipo de patrones de búsqueda avanzada. Especialmente se combinan con un un OR o barra vertical |, por ej. (en|es|fr|eus|cat). Y también sirven para capturar texto (como veremos un poco más adelante).

 

3. Cuantificadores en regEx

Los ponemos tras un carácter, [rango] o (grupo) de caracteres, y de este modo indicamos el número de repeticiones de ese carácter o grupo que queremos encontrar.

*
Cero o más de lo anterior (carácter, rango o grupo). Ej. .* representa cualquier cosa, cualquier combinación de caracteres, ya que es 0 o más de cualquier carácter.
+
Uno o más de lo anterior (carácter, rango o grupo). Ej. d+ es “al menos un número”.
?
Cero o uno de lo anterior (carácter, rango o grupo). Ej. inclusión de singular y plural: fuentes? coincide con fuente y con fuentes (el cuantificador se aplica a lo inmediatamente anterior, en este caso la “s”). También podemos poner auricular(es)? para auricular y auriculares.
{número}
Exactamente ese nº de repeticiones de lo anterior (carácter, rango o grupo). Ej. [a-z]{4} == Palabra de 4 letras.
{número,}
Ese nº o más de lo anterior (carácter, rango o grupo). Ej. Ej. [a-z]{4,} == Palabra de 4 letras o más.
{nº inferior,nº superior}
Dentro del rango, de X a Y repeticiones de lo anterior (carácter, grupo de caracteres, expresión entre paréntesis…). Ej. [a-z]{1,7} == Palabra de entre 1 y 7 letras.

 


RECOMENDACIONES SOBRE EXPRESIONES REGULARES

Expresiones Regulares ~= Contiene

Es muy importante empezar aclarando esto: comparar con una expresión regular es como comparar con contiene (en gran parte), pues siempre se busca la coincidencia parcial. Por ello, hemos de llevar las mismas precauciones en cuanto a no obtener más coincidencias de las oportunas (falsos positivos).

Veamos un ejemplo práctico que además es un caso típico en GA donde más de un@ hemos podido cometer errores: OJO!! Expresiones regulares para IPs en Google Analytics >> Hay que tener mucho cuidado al incluir las IPs como regexes en los filtros de Google Analytics, veamos este ejemplo contundente del blog de Google Analytics:

DON’T OVER DO IT: (See #3 above.) For example, many people use a Regular Expression only when creating an IP address filter. If the IP address is 6.255.255.255, they create an expression like this: 6.255.255.255 — and forget that that will also match 26.255.255.255, etc. So in a situation like this, you really do need to start with a beginning anchor, ^6.255.255.255 . A beginning anchor (called a carat), says, “To be a match, it has to start here.”

Fuente: analytics.googleblog.com/2009/04/regular-expression-tips-and-tricks.html

 

Mucho cuidado también con empezar las regex con ^ y/o terminarlas con $. Siempre que sea posible y encaje, es muy recomendable delimitar el inicio / final de aquello que deseemos calcular o extraer con la expresión regular. Estoy segura de que más de un@ hemos cometido errores inconscientemente y pueden seguir incluso sin detectar por ahí.

Ej.

Expresiones regulares: filtro Analytics por IP

No es lo mismo comenzar la regEx con ^ que no hacerlo. Si no ponemos ^, entonces la IP “182.130.207.119“… o CUALQUIER COSA delante del 82 será válida: “COSA82.130…”

 Otro ej.

naming-eventos-google-analyticsGoogle Analytics: Expresión regullar empieza por (regex)

Igual que en el ejemplo anterior, en este tipo de filtros también es conveniente asegurar la coincidencia al máximo para que no se “cuelen” otras coincidencias parciales por la izquierda o por la derecha.

Agrupar y Capturar datos entre paréntesis ()

Podemos capturar partes de texto o código meditante expresiones regulares para quedarnos con los datos concretos que nos interesen. Para ello incluimos (entre paréntesis) el texto a extraer. Los paréntesis en Expresiones Regulares cumplen dos misiones:

1.  Agrupar datos:

Al igual que en matemáticas, lo que va entre paréntesis está unido y se evalúa de forma conjunta con respecto al resto de la expresión.

Así, se puede utilizar un paréntesis para agrupar distintas condiciones a evaluar individualmente para luego utilizar conjuntamente con otras.

Por ejemplo, la siguiente expresión:

imagen_(jpg|png|gif)

 

Detectaría “imagen_jpg”, “imagen_png” o “imagen_gif”. Si en su lugar hubiéramos puesto

imagen_jpg|png|gif

No funcionaría correctamente ya que realmente estaríamos pidiendo “imagen_jpg”, “png” o “gif”.

2. Las expresiones regulares permiten encontrar porciones específicas de texto dentro de una cadena más grande de caracteres.

Veamos una aplicación práctica, en Google Analytics, al crear grupos de contenido vía Expresión Regular, lo que hacemos es quedarnos con un trozo de la URI o título de página, capturando el fragmento de texto deseado colocándolo entre paréntesis:

La extracción de content groups vía regEx consiste en detectar dentro de nuestras dimensiones Página, Título de página o Nombre de pantalla (tracking de APPs) una parte común + una diferenciadora, que será la que pueda definir al grupo, en encontrar un patrón. Ejemplo con Página, y extraer la parte que diferencia a cada grupo. Ej:

/blog/categoria/publicidad/
/blog/categoria/analitica/
/blog/categoria/seo/

/blog/categoria/(.*?)/

Donde (.*?) representa la parte diferenciadora que vamos a extraer para clasificar nuestros contenidos: publicidad / analitica / seo.agrupaciones-contenido-extraccion-regex

A continuación veremos por qué se incluye la expresión regular (.*?), con ? al final.

 

Expresiones Regulares: Greedy VS Lazy

Una expresión regular siempre va a tratar de encontrar el mayor número de coincidencias posibles y, además, ante la duda, siempre se elegirá entre varias posibilidades la coincidencia más larga. Es por esto, que en varios cheat sheets de blogs de referencia en inglés encontramos esto:

REGULAR EXPRESSIONS ARE GREEDY: They will match everything they possibly can, unless you force them not to. If your expression is “visits”, it will match “new visits” and “repeat visits.” After all, they both included the expression “visits.” To make them less greedy, you have to make them more specific

Fuente: analytics.googleblog.com/2009/04/regular-expression-tips-and-tricks.html

 

Greedy VS Lazy Regular Expressions: Veamos la explicación con el ejemplo más clásico a este respecto. Supongamos que queremos capturar el primer nivel de directorio de una ruta (o URI). En principio, podemos suponer que con esta regEx sería suficiente:

 (.*)/

¿Problema?

La expresión regular va a tratar de capturar absolutamente  toooodo lo que pueda (hasta el final), siempre y cuando exista una barra de directorio al final. Por tanto, cogería todo lo que se indica en negrita a continuación:

/pagina.html (no coindice, OK)
/nivel1/ (coincide y captura "nivel1", OK)
/nivel1/nivel2/nivel3/pagina.html (coincide y captura... "nivel1/nivel2/nivel3") :(

Es decir, la regex anterior solo funcionará y capturará un directorio, únicamente cuando tengamos un único nivel de directorio.

¿Solución?

Cambiamos a la regEx equivalente de tipo lazy o de coincidencia más corta.

(.*?)/

De ese modo le decimos que capture el primer tramo que encuentre que coincida (y como lee de izquierda a derecha, obtendremos justo lo deseado).

/pagina.html (no coindice)
/nivel1/ (coincide y captura "nivel1")
/nivel1/nivel2/nivel3/pagina.html (coincide y captura "nivel1")

Aquí siempre se cogerá el primer tramo correctamente.

Para hacer “lazy” un cuantificador le añadimos la interrogación ? al final.
regular-expression-greedy-vs-lazyImagen: cheatography.com/jay-taylor/cheat-sheets/google-analytics-regular-expressions/

De nuevo gracias a Aitor García por sus aportaciones y aclaraciones técnicas para este artículo!! (;

Escapar caracteres especiales en regEx con contrabarra

El lenguaje de expresiones regulares otorga un significado especial a determinados caracteres y combinaciones de caracteres concretas. Por ello, si queremos usar dichos caracteres en un sentido literal, con su significado estándar, deberemos librarlos de dicho significado (o “escaparlos”, como se dice en este contexto).

Para ello solo tenemos que anteponer la contrabarra o barra invertida () a cualquier carácter susceptible de tener significado en las expresiones regulares. Ejs. de caracteres escapados:

. * - / ?

Regular expression metacharacters: escapa siempre estos caracteres

Imagen: cheatography.com/jay-taylor/cheat-sheets/google-analytics-regular-expressions/


EJEMPLOS MÁS TÍPICOS DE EXPRESIONES REGULARES:

Regex más comunes para GA y para GTM y otros trucos avanzados.

Nota: como decíamos antes, en algunas herramientas no es necesario escapar todos los caracteres, así que si en algunos ejemplos no escapamos la barra de directorio, es solo por simplificar, pues en GA y GTM funciona así:

.*
Incluye todos los caracteres. Es la regEx por defecto en muchos programas como GTM: todas las páginas (si lo vemos aplicado a la dimensión Page). Significa literalmente “cero o más, de cualquier carácter salvo salto de línea”, con lo que incluye normalmente cualquier cosa.
.?
Uno o ninguno del carácter (o grupo entre paréntesis) al que sigue (punto ~= cualquier cosa). La interrogación en regex viene a decir que aquello que tenga delante puede estar o no en el texto.
.+
Uno o más del carácter (o grupo entre paréntesis) al que sigue, como mínimo un carácter. Si .* es “cualquier cosa”, .+ es “cualquier cosa excepto una cadena vacía”.
^a
Que empiece por a (o cualquier otro carácter o expresión que pongamos tras el acento circunflejo).
a$
Que termine en a.
^/$
El ejemplo más clásico con los dos anteriores modificadores: Equivale a sólo la barra del directorio (/). Se suele utilizar para capturar o filtrar la página home de un website.
Fíjate en que si no pusiéramos ^ o $ tendríamos serios problemas con esta regEx, pues se incluirían o todas las URIs que empiecen por barra (el 100%) o todas las que terminen en barra.
[^/]$
Buscar rutas que no terminen en barra.
^[^/]
Buscar rutas que no empiecen por barra.
^/[^/]+$
Buscar rutas exclusivamente de primer nivel (barra al principio + secuencia de caracteres sin ninguna barra adicional).
^/[^/]+/?$
Buscar rutas exclusivamente de primer nivel, con o sin barra al final (barra al principio + secuencia de caracteres sin ninguna barra adicional excepto, opcionalmente, al final).
^/[^/]*/?$
Cambiando el + por un *, incluimos la home (“/”) en la expresión anterior (barra inicial obligatoria + secuencia de caracteres OPCIONAL sin ninguna barra adicional + barra final opcional).

Algunos ejemplos más de regEx >

 

Un par de consideraciones sobre regEx para URLs en Google Analytics:

¿La URL va con barra o sin barra al final? ¿Son posibles ambas opciones? Entonces usaremos:/?. El cierrre de interrogación (?) sirve para dejar abiertas ambas opciones: URLs con o sin barra al final.

¿Queremos necesariamente que la URL empiece/acabe ahí? Entonces es fundamental utilizar el acento circunflejo ^ al ^principio, o el dólar ($) al final$. Si no, estaremos incluyendo o excluyendo más cosas de las necesarias en nuestros filtros.

 


¿DÓNDE USAR EXPRESIONES REGULARES EN GOOGLE ANALYTICS?

Prácticamente en todos sitios.

Caja y Filtros de búsqueda en los informes:

La propia búsqueda estándar admite expresiones regulares, y por supuesto la avanzada también.

busqueda-informes-analytics

busqueda-avanzada-informes-analytics

Filtros de Informes Personalizados:

Filtros de busqueda en Google Analytics

Por supuesto, en los segmentos avanzados:

segmentos-google-analytics

Los filtros de los widgets (dentro de los Paneles / Dashboards de Google Analytics):

filtro-widget-google-analytics

En la configuración de los Grupos de contenido, doblemente:

grupos-contenido-google-analytics

En la configuración de Agrupación de Canales:

agrupacion-canales-google-analytics

Y en la configuración de Modelos de Atribución:

modelos-atribucion-google-analytics

En los filtros de vista de Google Analytics (en el campo Patrón de búsqueda en casi todos los tipos de filtro personalizado, menos en buscar y reemplazar que es solo para cadenas de texto):
filtro-analytics-expresiones-regulares

Al personalizar informes de tipo Flujo en Analytics:

informes-flujo-google-analytics

En la configuración de objetivos:

analytics-goal-regular-expression

*El mismo tipo de coincidencia que elijamos en Destination / Página de destino (regEx, exacta, contiene), será la aplicada en cada uno de los pasos del funnel. Las expresiones regulares amplían las posibilidades a los embudos en Google Analytics.

 


¿DÓNDE USAR EXPRESIONES REGULARES EN TAG MANAGER?

Se utilizan ante todo en los activadores. En su definición y /o condiciones.

Por ej. en el activador de evento personalizado, podemos unificar vía expresión regular si tenemos varios namings distintos para un mismo evento.

custom-event-regEx-gtm

Cuando estamos creando el activador y aparece “Habilitar cuando” o “Enable when”.

gtm-enable-when-habilitar-cuando

Cuando nos toca definir las condiciones para un activador.

trigger-tag-manager-coincidence

 


CÓMO PROBAR SI FUNCIONAN LAS EXPRESIONES REGULARES

En la búsqueda del informe: Contenido / Todas las Páginas (u otros informes según el tipo de regEx). A veces, esta es una de las maneras más sencillas y fiables para revisar regEx específicas para GA.

Cómo probar expresion regular google analytics

Herramientas para expresiones regulares como Rubular.

Insertamos la regEx en el campo de arriba y todas las opciones que  deseamos capturar en el campo “Your test string”. De este modo, en “Match result” aparecerán resaltados los términos que coinciden:

Cómo probar una expresion regular en rubular.com

 


BIBLIOGRAFÍA Y RECURSOS: Aukera RegEx Cheat Sheet

Descarga nuestra chuleta de Expresiones Regulares

regex-cheat-sheet-aukera

https://support.google.com/analytics/answer/1034324?hl=en

https://support.google.com/a/answer/1371417?hl=en

https://www.cheatography.com/jay-taylor/cheat-sheets/google-analytics-regular-expressions/

https://support.google.com/analytics/answer/1116091?hl=en#matchTypes

https://help.libreoffice.org/Common/List_of_Regular_Expressions/es

https://regexone.com/