NOTA: Todas as informações apresentadas neste artigo foram obtidas na Internet, sendo assim, não ofereço nenhum tipo de garantia ou suporte. Não nos responsabilizamos por qualquer dano ocorrido, tanto na máquina (computador) quanto no software. Siga por sua conta e risco.
NOTA2: É permitida a cópia do conteúdo aqui publicado, desde que o autor seja informado e os créditos sejam mantidos intactos.
Neste artigo, veremos o quão simplório é trabalhar com
regex (regular expressions / expressões regulares) na
linguagem C, o que é consideravelmente útil, para fazer validações, filtros e procuras.
A intenção do artigo não será, no entanto, explicar o funcionamento das expressões regulares, mas sim explicar como usar este ótimo artificio na linguagem C. Antes de mais nada, eu gostaria de ratificá-los, com relação ao meu ambiente, para que vocês fiquem a par do conteúdo apresentado no artigo.
Distribuição: Ubuntu 11.10
Kernel: 3.0.0-12-generic
Compilador: gcc 4.6.1
IDE: Geany 0.20
O que são Expressões Regulares
É uma linguagem interpretada pelos interpretadores específicos para regex que, muitas linguagens, por padrão, aderem, como é o caso da linguagem Java, que possui a classe regex, da biblioteca java.util.
Com expressões regulares é possível identificar strings, caracteres, frases, números e trechos de um determinado texto ou quaisquer tipo de cadeia de caracteres. As expressões regulares foram uma criação do matemática estadunidense Stephen Cole Kleene, que não pode deixar de levar o seu devido mérito pela sua extraordinária genialidade. No
Linux, como muitos aqui sabem, temos o sed, o awk e o grep. Todos eles possuem suporte à expressões regulares.
Para nós, usuários de Linux, não há com o que se preocupar (devido à que estamos a usar as POSIX regex), para que usemos expressões regulares em C, visto que bastará incluirmos o arquivo cabeçalho regex.h ao nosso código-fonte. É válido lembrar também que não precisaremos usar nenhuma diretiva (ou flag, como alguns chamam) ao compilar com o gcc. Portanto, como você provavelmente observou, é algo demasiadamente simplório.
Vamos brincar um pouco com as expressões regulares, através do sed. Temos um arquivo, cujo nome, criativamente, é arquivo.txt, com o seguinte conteúdo:
Fabricante: VW
Modelo: Gol
Potencia: 1.8
Ano: 96
Se dermos o comando:
cat arquivo.txt
Teremos todo conteúdo deste arquivo impresso no terminal. Mas, e se quiséssemos exibir apenas o modelo, a potência e o ano? Teríamos de ignorar o fabricante.
Poderíamos fazer isso através de expressões regulares. O ^, por exemplo, em expressões regulares, indica que iremos ignorar algo. Podemos ignorar a linha referente ao fabricante com o seguinte comando:
sed '/^Fabricante/d' arquivo.txt
A saída seria:
Modelo: Gol
Potencia: 1.8
Ano: 96
Para que você possa ficar mais a par da definição e do conceito de expressão regular, eu não poderia, no entanto, deixar de referenciar este ótimo artigo do
Cristian Alexandre Castaldi: