Estudiando las expresiones regulares Parte I

Las expresiones regulares de cara a usar diferentes filtros, separar keywords, páginas,hacer agrupaciones varias nos pueden ayudar mucho. El problema es que pueden llegar a ser bastante “liosas”. Para mi la manera de aprenderlas es prueba y error – en los informes o con la API filtrando y viendo que nos sale y en caso de que no sea el deseado, volviendo a probar y googleando (seguro que en el foro de google o en el comentario de algún blog a alguien le ha ocurrido lo mismo). Sobre todo si no somos técnicos, debemos empezar de más a menos y practicando con cosas básicas; hasta irnos complicando más e intentar descifrar las expresiones que otros crean.


El objetivo no es ser unos gurús de expresiones regulares, si no obtener lo que queremos de una manera fácil y rápida (separar las brands keywords de las no brands, renombrar determinadas páginas …) Y una vez que hemos conseguido el resultado que queremos, intentar optimizarla (haciéndola más pequeña, ya que los caracteres están limitados). 


Si nos repasamos bien diferentes recursos que hay en la red, podemos conocer los caracteres principales – al final del post recojo los recursos que más me han ayudado  -
Entenderlos no es complicado ,el problema viene cuando queremos construir expresiones más complejas o optimizar las mismas. Así que este primer post tratará sobre esos caracteres básicos:


Caracteres básicos

  • \   Se usa para escapar y hacer que las expresiones regulares pierdan su caracter especial (agrupar, comodines)  y funcionen como los caracteres que son. Es decir, si yo tengo una web que tiene la siguiente página:  recetas?id=805  resulta que la ? es una expresión regular , es decir es un caracter especial . Como yo en este caso no quiero que se comporte de manera especial, le tengo que poner \ la barra delante para que sólo sea una interrogación y me quedaria así  recetas\?id=805 
  • . El punto indica el comodín del caracter, si por ejemplo ponemos  .aso nos cogería caso,paso, raso,laso. También % o un #  , en cambio nunca cogerá aso. Ya que es un comodín para un carácter.
  • | su significado es el de una “o”. Por ejemplo (moto|hogar) es lo que mismo que decir moto o hogar.
  • ^ indica principio de una cadena, ^/casa cogerá todo lo que empiece por /casa. No tendrá en cuenta /1casa o /verde_casa. En cambio si /casa_verde
  • indica final de la cadena, lo mismo que ^ , pero en vez de referirse al principio se refiere al final. Tenemos que tener cuidado ya que si ponemos el dolar y por ejemplo se añaden parámetros dinámicos después de la URL no nos cogerá eso.
  • ? significa que el último item antes de la interrogación es opcional. Puede estar o no puede estar , por ejemplo si escribimos vaso? nos devolverá vaso o vas.
  • +  Implica que el elemento anterior se repite 1 ó más veces.  gafas+  machea con gafassss o gafass, pero no con gafa. Ya que + es 1 ó más.
  • * El asterisco  indica cero ó más veces . Si seguimos con el ejemolo anterior, aquí además de gafass o gafasss cogería gafa. Otro ejemplo ma*o  coincidirácon: mo, maaao, mao
  • ( )  al igual que con las matemáticas, lo paréntesis sirven para agrupar algo que queramos que se tome de manera conjunta. Por ejemplo con mar(ine)?ro no estaría cogiendo marro o marinero (si no ponemos los paréntesis sólo se referirá al caracter anterior.
  • [ ] la palabra puede incluir 1 caracter de los que van en el corchete, pero sólo 1. Por ejemplo p[aei]n coincidirá con pan , pen, pin ; pero no con paen o pain. También son adecuados para agrupar intervarlos : [0-9] si queremos poner que coincida con cualquier número podemos escribirlo como si se tratase de un invervalo con el – para no tener que escribir todos los números. [a-zA-Z0-9] (cualquier letra o número ya sea en mayúscula o minúscula)
  • - Significa un rango [0-9] (cualquier número)
  • {}  Podemos usarlos con dos números {2,5} o con un uno {2}. {2,5} significa que el último caracter lo puedes repetir al menos dos veces , pero no más de cinco. En cambio si ponemos {3} significa que el último caracter se tiene que repetir tres veces, ni más ni menos. Si queremos 3 o más escribiríamos así {3,} 

Algunas combinaciones sencillas 

[0-9]{1,2} significa que tiene que haber un número que tenga como mínimo un dígito y como máximo dos.
.* Coge todo.  Recordemos que el punto es un comodín que significa coincide con cualquier caracter y el * significa que esté el caracter anterior o no. Al unirlas coge todo. También coge cadenas vacías, si no queremos que coja las cadenas vacias deberemos poner .+ , ya que .+ significa que haya algo.
También podemos realizar una negación [^p]aula  nos recoge todas las palabras que contengan aula, pero no cogería paula. Aquí también podemos usar los parántesis, por ejemplo  [^(mis)]thermorecetas me da todas las keywords que contienen thermorecetas menos misthermorecetas
^[1-9]home cogería 1home , 2home, 3home .

Además también podemos usar otros términos,  que nos pueden ayudar cuando hagamos determinados ejercicios, por ejemplo un análisis de keywords -entre otras cosas - 


  • \s significa un espacio en blanco Por ejemplo \heavy\smetal me cogería heavy metal o heavy metal band , pero no heavymetal.
  • \S  no hay un espacio en blanco – cualquier caracter menos un espacio en blanco) 
  • \b marca el inicio y el final de una palabra
  • \d un número . Equivaldría a [0-9] 
  • \D no es un número [^(0-9)]
  • \w es una caracter, número o _  [a-zA-z0-9_]   (lo mismo)
  • \W no es una caracter, número o guión bajo 

Un super ejemplo : ^\s*[^\s]+(\s+[^\s]+){1}\s*$ Esta expresión la vi en PPC Hero y me pareció espectacular, nos sirve para conocer el número de las keywords de las palabras que buscan contando las palabras en función de los espacios en blanco. Yo lo he interpretado así: que haya espacios en blanco al principio o al final no significa nada (teclear un espacio), donde no puede haber más de uno es entre las frase, ya que significaría que hay más palabras.
^s* empieza por un espacio en blanco o no (cero o más veces nos dice el asterisco) Puede no haber ninguno o haber muchos. Es al principio, no nos sirve para contar
[^\s]+  es una negación del espacio en blanco , no hay más espacios en blanco (también hubiesen podido escribir [\S]+  Si no hay espacio en blanco tengo un caracter o más (nos lo indica el +) y un carácter o más es una palabra(\s+[^\s]+){1} El 1 afecta a todo lo que hay dentro del paréntesis y significa que sólo puede haber uno lo que haya entre el paréntesis: ¿y que es lo que hay? un espacio en blanco (el del medio de las dos keywords) y un caracter o más (es decir una palabra, pero no espacios en blanco) . El $  indica final (ya no me cojas nada que tenga algo más). En el caso de que se quieran tres palabras  
^\s*[^\s]+(\s+[^\s]+){2}\s*$  (aquí ya pueden haber dos espacios en blanco y dos keywords más  -además de la primera -

Recuerda
1. Siempre debemos probar nuestras expresiones regulares , para ver si lo estamos haciendo bien. En lo informes podemos hacerlo de una manera sencilla.
2. Siempre hay que escapar, o no funcionarán las expresiones como queremos. Otra cosa que tenemos que tener en cuenta es que en los informes y en los segmentos Google Analytics escapa automaticamente; en cambio en los filtros de los perfiles y en la configuración del funnel no se escapan de manera automatica. Aún así si escapamos algo que no hace falta, no ocurre nada; así que más vale “escapar que lamentar”
3. Cuidado con los parámetros que pueden añadirse de manera dinámica a las URLs.
4. Si quieres usar en algunos puntos expresiones regulares, tienes que indicarle que estas usando una expresión regular; ya sea para incluir o excluir; tanto en los informes , como en los objetivos o segmentos. Si para extraer información usas la API  sería poner por ejemplo ga:source=~(xxxx|yyyy) que significa coincide con la fuente xxxx o yyyy . En cambio si lo niegas sería – que no coincida sería – ga:source!
~((xxxx|yyyy) -si añades varios filtros poner un punto y coma entre uno y otro significa Y (tienen que cumplir los dos requisitos; mientras que poner una coma es O (nos vale cualquier condición)
5. Si los empleas para filtros en perfiles, no se reprocesa la información; así que siempre uno nuevo  de copia – los datos no se ven de manera inmediata - 
6. Desconfía de cualquier expresión regular que veas o te digan,  hasta que tu no lo hayas probado. 

Recursos (algunos de los cuales me han servido como fuente para este post)


- Conversion University (parte de expresiones regulares) Lo oficial de Google
- Manual de Lunametrics (de 10) Es un manual muy completo y muy claro con los diferentes ejemplos
- Post de Gemma Muñoz Explicado de manera clara  y de un vistazo te ayuda a ver el significado de las diferentes expresiones.
- Herramienta para testear que funcionan bienhttp://www.regular-expressions.info/ Está muy bien y es muy completo, pero recomiendo dejar este recurso para cuando nos hayamos familiarizado con los principales caracteres. Mi próximo paso bajarme el pdf (con una donación, que se lo merecen) y estudiármelo a fondo.

- Post de Natzir Turrado  Una chuletilla con muchos recursos 


Y gracias a @mjcachon por la idea del post :) que también me ha venido muy bien

Leave a Reply

HTML tags are not allowed.

Follow

Get every new post delivered to your Inbox

Join other followers