Geralmente conhecidas por estudantes de computação (e outras áreas de exatas), as expressões regulares consistem em uma maneira de representar um padrão de caracteres. Apesar de ser mais utilizada por programadores, elas podem ser muito úteis para auxiliar na segmentação e análise de dados obtidos através do Google Analytics.
Por exemplo, uma segmentação muito útil é a do tráfego dos usuários que chegam ao site através de keywords relacionadas a marca versus keywords não relacionadas. Supondo o site “fabianemlima.com”, algumas possíveis variações:
- fabiane lima
- fabiany lima
- fabiani lima
- fabilima
Ao invés de filtrar o tráfego pelas keywords que podem conter um dos termos listados acima, o que resultaria em um filtro semelhante a:
- ‘fabiane|fabiany|fabiani|fabi’
poderíamos utilizar o fato de que todas as keywords relacionadas a marca “fabianemlima.com” começam com o radical ‘fab’. O que resultaria em uma expressão regular com a seguinte configuração:
- fab.*
Onde os caracteres ‘.*’ representam qualquer conjunto de caracteres (vale ressaltar que o ‘.’ em si significa qualquer caracter – letras, números, espaços, caracteres especiais. Já o ‘*’ indica repetição de 0 ou mais vezes do caracter anterior).
O que é muito mais simples, não é mesmo?
Ainda neste exemplo, podemos supor que o site “fabianemlima.com” possui keywords relacionadas a marca com o mesmo radical “fab” (por exemplo, uma long tail com a palavra “fabricação”). Esse fato pode ‘estragar’ a nossa expressão para keywords relacionadas a marca, pois além das keywords relacionadas a marca, nossa expressão vai pegar também as long tails (ou short tails) que contém alguma palavra com o mesmo radical.
Para contornar essa situação, podemos deixar nossa expressão um pouco mais esperta:
- fabi(an.)?
Essa expressão regular vai pegar conjuntos que contém uma palavra que comecem com “fabi”, e podem ou não terminar com cadeias que comecem com “an” e tenham três caracteres. Ou seja, com essa expressão conseguimos filtrar todas as expressões listadas pela marca em questão, mas não expressões que contenham “fabricação” ou outra palavra com o radical fab.
Mas será mesmo que essas expressões citadas acima funcionam?
Testando Expressões Regulares
Uma das maneiras de testar essas expressões é através do uso do RegexPal, uma ferramenta online e gratuita bem interessante para realizar esses testes. A segunda, e mais segura, é utilizar o próprio Google Analytics. Primeiramente, vamos utilizar a RegexPal.
Supondo a lista de keywords de entrada:
A expressão regular dada no início desse artigo, ‘fabiane|fabiany|fabiani|fabi’, significa: pegue os termos que contém “fabiane”, ou “fabiany”, ou “fabiani” ou, ainda, “fabi”. Fazendo o teste na regexpal, temos o seguinte resultado:
Onde podemos notar que todas as expressões de entrada, em algum ponto, foram “pegas” pela expressão. Mas, qual parte da expressão regular foi responsável por qual match nas expressões de entrada?
Podemos notar que:
- “fabiane” foi responsável pelos matches das linhas 1 e 5;
- “fabiany” foi responsável pelo match da linha 2;
- “fabiani” foi responsável pelo match da linha 3;
- “fabi” foi responsável pelos matches das linhas 4, 6 e 7;
Testando a segunda expressão (“fab.*”) na mesma lista de expressões, obtemos:
Onde é possível notar que a expressão regular “pegou” todas as expressões da lista. Entretanto, se aumentarmos essa lista com termos com o radical “fab” temos o seguinte resultado:
Onde podemos notar que as expressões “fabricação”, “fab – força aérea brasileira” e “fab concursos” também representaram match para a nossa expressão. O que não é uma situação ideal no nosso caso.
A terceira expressão de utilizamos na introdução do artigo foi “fabi(an.)?”. Utilizando essa expressão na lista atual de keywords, temos o seguinte resultado:
Onde podemos notar que as expressões com radical “fab” e não relacionadas a “fabianemlima.com” não representaram matches para a expressão regular.
A principal vantagem de utilizar o RegexPal para testes é que essa ferramenta é mais rápida que o Google Analytics – enquanto no RegexPal você pode obter os resultados dos testes enquanto digita a expressão regular, no GA é necessário aplicar filtros em todos os dados do período selecionado – o que leva algum tempo de processamento.
Outro ponto importante ao utilizar a RegexPal é que é necessário utilizar um bom conjunto de amostras, conforme a finalidade da expressão. Por exemplo, se você vai fazer uma expressão para pegar keywords relacionadas a sua marca, é necessário usar como amostras tanto keywords relacionadas a sua marca como keywords não relacionadas.
Sintaxe das Expressões Regulares
Abaixo, segue uma tabela com os principais elementos da sintaxe das expressões regulares aceitas nos relatórios do Google Analytics, juntamente com seus respectivos significados e exemplo de aplicação.
. | Quando o ponto é utilizado, ele pode significar qualquer caracter (letra, número ou símbolo) Por exemplo, a expressão mestre.seo pode significar ‘mestre seo’, ‘mestre5seo’, etc |
* | Significa de 0 a mais repetições do caracter anterior Por exemplo, mestre*seo pode significar ‘mestreseo’, ‘mestreeseo’, ‘mestreeeseo’, mas não ‘mestre seo’ ou ‘mestreaseo’ |
+ | Implica na repetição do caracter anterior, pelo menos uma vez. Por exemplo, mestre+seo pode significar ‘mestreeseo’, ‘mestreeeseo’, … , mas nunca ‘mestreseo’ ou ‘mestre seo’ |
? | Significa que o caracter anterior pode ou não aparecer Exemplo, mestre?seo pode significar tanto ‘mestreseo’ quanto ‘mestrseo’ |
| | Significa OU. Exemplo: a|b pode significar tanto ‘a’ quanto ‘b’. (mestre)|(seo) pode significar tanto ‘mestre’ quanto ‘seo’ |
^ | Significa que o termo em questão está no começo da expressão. Exemplo: ˆmestre pode significar mestreseo, mas não seomestre |
$ | Significa que o termo em questão está o final da expressão. Exemplo: mestre$ pode significar seomestre, mas não mestreseo |
() | É usado para criar um item. Por exemplo, (m|M)estre(seo|SEO) pode significar tanto Agência Mestre, mestreSEO, mestreseo ou Mestreseo – mas não mestre seo |
[] | São utilizados para criar uma lista de itens. Por exemplo, [abc] cria uma lista com esses três termos. Ao utilizar esse recurso, é possível encontrar tanto a, b ou c |
– | Cria intervalo na lista criada por []. Por exemplo, [a-e], cria uma lista das letras do alfabeto compreendidos entre ‘a’ e ‘e’ (ou seja, a,b,c,d ou e). Assim como de [A-Z] monta uma lista com as letras maiúsculas. |
\ | “Escapa” um caracter para que o mesmo seja utilizado com seu significado original e não como regex. Por exemplo, mestreseo\.com\.br vai significar mestreseo.com.br e não mestreseo<com<br |
\d | Tem a mesma funcionalidade que [0-9] Exemplo: 1\d vai segmentar todos os números compreendidos de 10 a 19. |
\s | Signica um espaço em branco Exemplo: Mestre\sseo significa ‘Mestre seo’ mas não ‘Mestreseo’ |
\S | Signica qualquer caracter que não seja um espaço em branco. Exemplo: Mestre\Sseo significa ‘Mestre.seo’, ‘Mestre8seo’, ‘Mestre_seo’ mas não ‘Mestre seo’ |
\w | Significa qualquer letra ou número, letra ou underline Exemplo: Mestre\wseo significa ‘Mestre9seo’, ‘mestreeseo’ ou ainda ‘mestre_seo’, mas não ‘mestre-seo’ ou ainda ‘mestre%seo’ |
Vale lembrar que grande parte dessa lista pode ser obtida na resposta para a pergunta “o que são expressões regulares” no fórum do GA.
Conclusão
Quando o assunto é segmentação de dados, as expressões regulares consistem em um recurso muito versátil – através delas é possível não somente segmentar o tráfego por grupos de keywords, mas também por grupos de páginas do próprio site ou de sites de referência, bastando apenas configurar corretamente uma expressão que corresponda ao padrão que você precisa segmentar. Nos próximos artigos, vamos passar exemplos práticos de como utilizar as expressões regulares no Google Analytics, tanto nos relatórios de keywords como em relatórios de outros tipos de dados.
Ficou alguma dúvida sobre a sintaxe das expressões regulares ou gostaria de fazer uma sugestão ou observação? Fique à vontade e deixe seu comentário.
Ótima postagem Fabi! REGEX é um assunto muito pertinente e com carência de conteúdo de fácil entendimento, como o seu. Vale lembrar também que expressões regulares, mesmo para não-programadores, podem ajudar muito na busca do Dreamweaver e na edição do .htaccess.
Oi, Tony. Quanto a edição do .htaccess, saber regex é quase essencial, mas confesso que uso um pouco o Dreamweaver no dia a dia, para fazer substituições. =)
No mais, que bom que gostou do artigo.
Ótimo artigo, como a maioria do conteúdo aqui da Agência Mestre =)
Apenas uma observação que, assim que iniciei com regular expressions, não soube e, algumas vezes, não entendia o motivo de minhas expressões não funcionarem, hahaha:
– O ponto (.) não corresponde qualquer caracter, mas sim qualquer caracter EXCETO a quebra de linha (r e n).
Sei que existe a possibilidade de fazer com que o ponto dê um match, também, em quebra de linhas, mas acredito que a informação pode ser útil para quem estiver quebrando a cabeça =D
Obrigada pela observação, Vini. Mas vale lembrar que quando estamos fazendo expressões regulares para GA não tem problema, pois teoricamente não existem quebras de linhas nos dados, pois cada dado constitui uma linha somente. =)
Vini, já que você apresentou esse problema que teve no inicio da sua utilização de expressões regulares.
Queria dizer que estou tendo esse problema
Como fazer para aceitar todas as quebras de linhas?
Você quer dar um match APENAS em quebras de linhas? Bastaria usar {REGEX} n {/REGEX}. Ou, ainda, {REGEX} rn {/REGEX}. Pra entender o motivo do rn, dê uma olhada em stackoverflow.com/questions/1761051/difference-between-n-and-r.
Ou você quer dar um match em qualquer sequência de caracteres, incluindo a quebra de linha? Aí, seria {REGEX} (n|.)* {/REGEX} ou {REGEX} (rn|.)* {/REGEX}.
No entanto, dar um match em qualquer sequência de caracteres, incluindo as quebras de linhas, pode não ser uma regex inteligente.
Supondo que você queira dar um match em um texto, por exemplo, até que seja encontrado o sinal de dois pontos, uma regex mais apropriada seria {REGEX} [^:]* {/REGEX}. Caso quisesse incluir os dois pontos no match, bastaria alterar para {REGEX} [^:]*: {/REGEX}.
O texto
Teste um, dois três:
Teste quatro, cinco.
Seis, sete, oito:
Nove dez.
retornaria 3 matches, sendo eles:
– Teste um, dois três:
– Teste quatro, cinco.
Seis, sete, oito:
– Nove dez.
As regexes acima estão, obviamente, entre {REGEX} e {/REGEX}.
Tenho trauma de expressões regulares.
Alguns anos atrás migrei minha hospedagem de um host pequeno para um grande com ambiente windows, usava apenas wordpress e precisava dar um jeito de fazer o rewrite das URL, passei algumas noites programando.
No ambiente de testes do desenvolvedor do plugin do IIS funcionava bem, na hospedagem não, acabei migrando novamente para Linux, por esse e outros motivos.
Quem sabe agora não perca o trauma!
Espero que você perca o trauma de expressões regulares sim, Guilherme. Afinal, elas podem ser muito úteis para outras finalidades. =)
Simplesmente excelente, parabéns pela postagem simples, objetiva e de fácil compreensão.
Oi se eu quiser redirecionar um post exemplo dominio.com/?p=123 para exemplo http://google.com.br/
quero fazer um redirecionamento 301
redirect 301 /?p=123 http://google.com.br/
só que assim não faz prq tenho uma expressão regular ? = que regra deve usar para fazer o redirecionamento 301 via .htaccess
atte andré
E ai Pessoal tudo tranquilo?? alguém poderia me dizer como posso fazer uma empressão regular que represente:
Identificadores
• caracteres válidos – letras, digitos e os
caracteres especiais: “@”, “#“ e “_”
• regras de formação:
• começa com letra ou com “@”
• não pode terminar com “@”, “#“ e “_”
• não possui caracteres especiais consecutivos
• não possui limite de tamanho