E aí pessoas!

Estou de volta pra falar um pouco mais sobre expressões regulares. Assunto que iniciei no post de introdução.

A partir de agora, pra economizar teclas e aumentar a vida útil do meu teclado, vou me referir às expressões regulares como regex (do inglês, regular expression). É bem comum encontrar pessoas usando este termo e é bem útil também como palavra chave na hora de “googlar”.

Dados nomes e apelidos aos bois, é hora de conhecermos a ferramenta que fará parte das demonstrações.

Eu fiquei pensando um pouco sobre qual seria a melhor ferramenta pra demonstrar na prática o funcionamento das expressões. Passou pela cabeça usar uma linguagem de programação, como Python, mas adicionaria um pré-requisito, que seria ter Python instalado. Pensei também em mostrar os exemplos usando o egrep, mas quem usa Windows teria que instalar algum emulador de ferramentas Unix. Por mais simples que seja a instalação de qualquer uma delas, eu queria uma solução ainda mais acessível. No final, acabei encontrando uma plataforma bem interessante que pareceu um modo bem acessível pra qualquer leitor do blog poder acompanhar os exemplos. Se trata do RegExr, uma plataforma online para testar matchings com regex, desenvolvida pelo Grant Skinner (gostaria de poder fazer um comentário vibrante sobre ele agora, mas não conheço a peça, então fica pra próxima, sorry pal).

Já que estamos no assunto “ferramentas com suporte a regex”, tem um ponto que quero destacar.

Primeiro, permitam-me contar uma curiosidade sobre a minha região.

Eu moro em São Vicente (SP), uma cidade da baixada santista. Aqui na baixada, nós vamos em qualquer padoquinha e pedimos um pão de cará, recebemos o produto e saímos felizes e contentes. Vale ressaltar que na receita do nosso pão de cará não vai cará (isso mesmo, no pão de cará não tem cará, hahaha). Legal! Se eu for pra cidade de São Paulo (lugar bacana, trabalhei por lá um tempo) e pedir um pão de cará, vão me olhar com uma cara esquisita e pensar que eu sou um retardado. Porque lá não existe esse negócio de pão de cará!

Eu contei esta historinha porque no mundo das expressões regulares temos um fenômeno parecido. Eu havia mencionado que as expressões regulares estão em “tudo que é lugar”, no sentido de que um grande conjunto de ferramentas e linguagens de programação suportam o uso de regex. Dentro de uma regex, alguns termos tem significado especial, e existem termos especiais que estão presentes em algumas ferramentas, mas que simplesmente não existem (quero dizer, não tem nenhum significado especial) em outras ferramentas.

Ah, fala sério! Cada vez que eu mudar de ferramenta, vou ter que aprender uma sintaxe nova?

Nada de pânico! Existem sim algumas diferenças nos termos especiais, mas não é um caos generalizado. Assim como acontece em nosso idioma, há uma base central de termos fundamentais que são bem consistentes e usados da mesma maneira em todos os lugares. O importante é aprender esta base, que será suficiente pra fazer muita coisa (muita coisa mesmo). Em outras palavras, saber a base sobre regex é o suficiente para se comunicar com os processadores de regex. Aprender um recurso específico de uma ferramenta seria um extra, análogo a aprender uma gíria que seja conhecida apenas em determinada região do país.

Sem mais delongas, hora de fazer matchings! \o/

Lembram da frase do glorioso Chico que usei no post anterior? Pois é, vou utilizá-la de novo. Pra quem não leu a primeira parte, a frase está aí:

Eu gostaria de ser monge, mas a profissão de monge no Brasil não dá dinheiro.

Primeiro, vou copiar e colar a frase no campo Text do RegExr. Em seguida, no campo Expression, vou prencher com a expressão monge (ignore a / no início e o /g no fim, eles fazem parte da sintaxe, apenas preencha a expressão entre as duas barras):

imagem ilustrando matching da regex "monge"

Como podem ver, o RegExr usa expressões regulares pra fazer uma busca e dá um destaque nos termos que dão match (meio estranho o termo, mas se o aplicativo de pegação usa, por que não eu?).

Neste primeiro exemplo, passamos a expressão monge e o Regexr encontrou 2 grupos de caracteres dentro da string que deram match com nossa expressão.

Eu comentei sobre termos que tem significado especial dentro da regex. Pois não é o caso de nenhum dos caracteres da expressão monge. Os caracteres que não possuem um significado especial, são tratados como literais, isto é, eles batem apenas com um caractere igual a ele mesmo. Por exemplo, “m” bate apenas com “m”, “o” bate apenas com “o”, “n” bate apenas com “n” e assim por diante.

Outra coisa, uma regex pode ser formada por múltiplos elementos, de modo que um trecho da string deve bater com a expressão regular inteira. A expressão monge só dá match com a string “monge”. Por exemplo, altere a expressão de monge para monges e veja o que acontece:

imagem ilustrando matching da regex "monges"

Não houve match, pois não existe a sequência “monges” na string.

E a busca não se limita a palavras completas, a regex vai considerar como match quaisquer trechos que batam com o padrão descrito na expressão, como apenas mon:

imagem ilustrando matching da regex "mon"

Lindo, não? Pra hoje, já está de bom tamanho. No próximo post veremos alguns dos tais caracteres especiais.

Valeu pessoas!

Falou…


Introdução (anterior) (próximo) Primeiros Metacaracteres