Regex para Sistemas Embarcados?

Regex

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.

Regex capturando range de valores.
Figura 1: Regex capturando range de valores de temperatura.

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:

  1. Um espaço: ” “;
  2. Um digito 3: “3”;
  3. Qualquer digito entre 0 e 3 “[0-3]”;
  4. 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.

Regex com exclusão de padrão.
Figura 2: Regex com exclusão de padrão.

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.

grep para localizar padrões. Busca por e-mails do google no código do OpenCV.
Figura 3: grep para localizar padrões. Busca por e-mails do google no código 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

Regular Expressions

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!

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
11 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Lauriano Elmiro Duarte
laurianoelmiroduarte
02/08/2018 17:31

só lembrando que as formulas de RegEx, funcionanm de formas diferentes em editores diferentes, entretanto, ótimo artigo, parabéns.

Rafael Dias
Rafael Dias
29/01/2016 13:05

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:
http://blog.brush.co.nz/2009/02/regex-libs/

Igor Borges Tavares
Igor Borges
Reply to  Rafael Dias
29/01/2016 14:41

Muito boa essa fonte!

Alguma libs ai são bem enxutas, e a maioria eu não conhecia.

Obrigado por contribuir!

Euclides Franco de Rezende
Euclides Rezende
04/01/2016 15:49

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.

Igor Borges Tavares
Igor Borges
Reply to  Euclides Rezende
04/01/2016 16:56

Sim, é possível “incrementar usando REGEX”, como é tratado aqui http://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!

Éder Paulo Pereira
Eder
28/12/2015 09:33

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.

Igor Borges Tavares
Igor Borges
Reply to  Eder
28/12/2015 09:38

Ótimo exemplo de uma boa aplicação de regex! E o Sublime é realmente sensacional!

Rafael Dias
Rafael Dias
16/12/2015 15:10

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!

Igor Borges Tavares
Igor Borges
Reply to  Rafael Dias
16/12/2015 22:01

Valeu Rafael!

Também já li em muitos lugares esse tipo de frase, e acaba que elas tem razão mesmo!

Abraços!

André Curvello
16/12/2015 00:12

Boa, Igor!
RegEx dá uns “mindcrack” bem forte, mas é importante pra fazer programação eficiente!

Igor Borges Tavares
Igor Borges
Reply to  André Curvello
16/12/2015 21:59

Obrigado Mestre!

Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services