dezembro 26, 2017

[Carreira] Expressões regulares

Expressão regular (também chamado de "regex", uma abreviação do inglês "regular expression") é uma forma concisa e flexível de representar conjuntos específicos de caracteres de forma a identificá-los dentro de um conjunto maior, como quando procuramos por palavras específicas ou padrões de caracteres em um bloco de texto.

As expressões regulares são escritas numa linguagem formal para identificar os blocos de texto que coincidem com a especificação dada.

O exemplo mais simples e arcaico de uma expressão regular é o uso do asterisco (*) e da interrogação (?) na linha de comando do windows ou Linux, aonde o asterisco representa qualquer conjuto de caracteres e a interrogação representa um caractere qualquer (como quando, por exemplo, você busca por todos os arquivos com final .doc fazendo um "dir *.doc"). Hoje as expressões regulares são aceitas em uma grande quantidade de linguagens de programação e ferramentas, como Perl, Python, Ruby, Java, PHP, e MySQL.

Recentemente eu encontrei um artigo com 8 expressões regulares referente a informações capturadas em web sites que todo mundo deveria saber. Elas são bem interessantes e mostram o poder das expressões regulares, por isso eu resolvi destacar aqui 5 delas:
  • Para identificar um username:  /^[a-z0-9_-]{3,16}$/
  • Para uma senha com 6 a 18 caracteres: /^[a-z0-9_-]{6,18}$/
  • Para identificar um e-mail:  /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
  • Para uma URL: /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
  • Para um endereço IP:
    /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
O site Regexpal dá outra dica para identificar endereços IPv4:
^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$

Além das expressões acima, outra que pode ser bastante utilizada no dia-a-dia é para identificar nomes de pessoas. Sem considerar caracteres acentuados, uma exressão simples sugerida pelo site Regexpal é:
^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$
Eu, recentemente, me baseei nesse para criar um Regex bem mais simples, aonde o "\s" permite identificar nomes compostos:
[A-Za-z\s]+

Há vários sites que ajudam a criar e testar expressões regulares, basta uma busca rápida no Google. Três sites muito bons são o regexr.com e o regexpal.com, e o regex101.com. Neles é possível colar o texto aonde você quer achar um determinado padrão e testar sua expressão regular, na medida que a escreve. ambos os sites também tem algumas referências e exemplos.

A O'Reilly tem dois livros sobre o assunto:

Para saber mais:

Nenhum comentário:

Creative Commons License
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of my employee.