ÍNDICE DE CONTEÚDO
Nesta semana eu estava conversando com um amigo que trabalha desenvolvendo firmware para microcontroladores. Certa hora eu perguntei a ele algo que me intriga há algum tempo:
“Por que parte dos desenvolvedores de sistemas embarcados não tem o costume de incluir regex em sua lista de estudos?“
Ele respondeu que aplicações baremetal muitas vezes não precisam trabalhar arquivos de texto e nem strings muito complexas. E que devido aos recursos computacionais normalmente serem limitados, quando é necessário o reconhecimento de algum padrão de caracteres é preferível a implementação de algum algoritmo mais simples e específico do que embarcar um motor inteiro de regex.
A resposta dele faz bastante sentido, mas apesar de ser possível, em nenhum momento eu estava sugerindo a utilização de regex embarcada. Eu estava querendo propor a utilização de regex nas IDEs e nos editores de textos para facilitar buscas e substituições nos códigos e arquivos de log.
Afinal de contas, por mais que sua aplicação nunca vá precisar processar uma string, o source do seu projeto sempre será arquivos de texto!
Regex
Regex (Expressões Regulares) é altamente utilizada no mundo da computação para a validação de dados, “busca e substituição”, manipulação de strings, raspagem de dados, highlighting, etc. Mas aqui vou focar em exemplos para ajudar no ambiente de desenvolvimento e que podem ser úteis para qualquer programador.
Este post não tem a intenção de ser um tutorial de regex, até porque já existem muitos bons por aí (veja a seção “Saiba mais” no final do artigo), mas apenas expor algumas situações em que um conhecimento básico de regex pode acelerar a sua produtividade.
Exemplos de Regex
Qualquer IDE ou editor de texto que se preze dá suporte a regex nas suas ferramentas de busca, nem que seja por meio de plug-in. Então fique livre para rodar os exemplos em qualquer lugar, lembrando sempre de fazer as alterações necessárias de acordo com as características de cada ferramenta.
Eu utilizarei um analisador online de regex para fazer este post. Existem vários por aí, sinta-se à vontade para fazer isso também.
Valores de um range específico
Imagine que a sua aplicação fique imprimindo logs com o valor da temperatura mensurada constantemente. E entre milhares de amostras que não lhe interessam você quer procurar apenas por aquelas contidas entre 30 e 33 graus Celsius. Veja a Figura 1 abaixo.
A regex utilizada para encontrar os números entre 30 e 33 foi ( 3[0-3] ) , onde declaramos a busca de uma sequência de caracteres com o seguinte padrão:
- Um espaço: ” “;
- Um digito 3: “3”;
- Qualquer digito entre 0 e 3 “[0-3]”;
- Outro espaço: ” “.
Ela pode ser vista em funcionamento aqui.
Exclusão de determinados padrões
Agora vamos supor que por um erro de projeto, todas as mensagens emitidas por sua aplicação estão espalhadas pelo código em português e você precisa alterar o idioma dessas mensagens. Mas infelizmente o código está cheio de “printf(“\n”);” e derivados, utilizados para quebrar linha que vão atrapalhar na sua busca pelas mensagens que devem ser atualizadas. Veja a Figura 2 abaixo.
A regex utilizada foi printf\(\"(?!(((\\n)+)\")).* , e ela pode ser vista em funcionamento aqui.
Busca de padrões com grep
O grep (globally search a regular expression and print) é um dos comandos mais famosos de sistemas Unix-like. E serve justamente para a operação de busca utilizando regex.
Agora vamos usar o grep para procurar todos os e-mails válidos de funcionários do Google que existem no código-fonte do OpenCV.
A regex utilizada foi ([A-Z|a-z|0-9](\.|_){0,1})+[A-Z|a-z|0-9]\@google.com , e o comando sort foi utilizado para ordenar os e-mail encontrados e eliminar as repetições.
Saiba mais
About Using Regular Expressions
Introduction: Giants In Tiny Pants
Using Regular Expressions and Staying Sane
Conclusão
São exemplos bobos, mas que podem dar uma noção de como regex pode ajudar em seus projetos independente do objetivo da sua aplicação. Divirta-se!
só lembrando que as formulas de RegEx, funcionanm de formas diferentes em editores diferentes, entretanto, ótimo artigo, parabéns.
Estava aqui pesquisando algumas técnicas para destrinchar um pacote NEMEA (de GPS) e pensei… Porque não usar regex?
Aí, dei uma pesquisada e me deparei com este post:
https://blog.brush.co.nz/2009/02/regex-libs/
Muito boa essa fonte!
Alguma libs ai são bem enxutas, e a maioria eu não conhecia.
Obrigado por contribuir!
Muito doido isso…
Alguem conhece algum uso de REGEX em sistema que usam BI (Business Inteligence)???
Tenho parte de um sistema desenvolvido usando essa tecnologia (cubos) e gostaria de saber se é possível incrementar somando REGEX.
Obrigado.
Euclides.
Sim, é possível “incrementar usando REGEX”, como é tratado aqui https://stackoverflow.com/a/12942634/4162047 !
Mas não fica muito bonito, acredito que para determinadas situações como essa seja mais viável misturar a regex com algum script para facilitar as coisas!
Tá aí uma coisa pra me aprofundar. Em um outro emprego, lembro que o regex nos auxilou para o envio de arquivos do sped ao sefaz. Foi muito útil, pois cada arquivo de texto tinha milhões de linhas, e, aliado ao sublime text, conseguimos fazer umas alterações.
Ótimo exemplo de uma boa aplicação de regex! E o Sublime é realmente sensacional!
boa!
Eu uso regex para , por exemplo, análise de arquivos de log. Comecei a olhar com mais carinho para RegEx quando, pesquisando sobre o assunto a alguns anos atrás, encontrei uma lista com motivos para se estudar RegEx. Era algo assim:
“Usar expressões regulares podem fazer você se sentir como um poderoso mago”.
Realmente é. Se você usar a expressão correta pode filtrar informações muito úteis.
Legal de ter abordado o assunto, Igor!
Valeu Rafael!
Também já li em muitos lugares esse tipo de frase, e acaba que elas tem razão mesmo!
Abraços!
Boa, Igor!
RegEx dá uns “mindcrack” bem forte, mas é importante pra fazer programação eficiente!
Obrigado Mestre!