Expressões Regulares (POSIX) em C

Neste artigo veremos o quão simplório é trabalhar com expressões regulares em C.

[ Hits: 27.497 ]

Por: André em 18/10/2011 | Blog: http://127.0.0.1


Introdução



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:
    Próxima página

Páginas do artigo
   1. Introdução
   2. O primeiro contato
   3. O arquivo regex.h
Outros artigos deste autor

Trabalhando com Java e SQL (parte 1)

Computação Forense - Entendendo uma perícia

CrossOver - Programas de Windows em seu GNU/Linux

Instalando o Debian em uma máquina virtual (VirtualBox)

Trabalhando com a interface gráfica em Java (parte 2)

Leitura recomendada

Projeto Icecream (parte 1)

Introdução à plataforma GNU de desenvolvimento

Manipulando arquivos em C (parte 1)

Otimização de algoritmos

Mais sobre recursividade em C/C++

  
Comentários
[1] Comentário enviado por andrezc em 18/10/2011 - 13:58h

Só um pequeno adendo:
Não sei por que motivo, mas onde está o caractere '®', deveria estar ®.



Vou ver se entro em contato com o Fábio, para corrigir.

[2] Comentário enviado por levi linux em 18/10/2011 - 14:10h

Excelente artigo, muito interessante.
Ia justamente perguntar como inserir esse símbolo.
Parabéns!

[3] Comentário enviado por WhiteHawk em 19/10/2011 - 07:04h

Parabéns! Gostei muito desse artigo.

Tive apenas uma dúvida, sobre a expressão regular em si, e não sobre a programação.

Qual a função da seguinte expressão regular? .+@.+\\.[a-z]+

[4] Comentário enviado por _m4n14c_2 em 20/10/2011 - 03:54h

A expressão regula .+@.+\.[a-z]+ significa o seguinte:

.+ => . quer dizer que a expressão pega qualquer caracter, + quer dizer que o . deve pegar ao menos 1 caracter, mas podem ser mais de um, até infinitos...
@ => corresponde ao caracter @ do email
.+ => a mesma coisa que o primeiro .+
\. => a barra invertida modifica o caracter .,que normalmente representa qualquer caracter, para corresponder apenas a um ponto literal. Em C a barra invertida é usada para escapar outros caracteres, como \n,\t, \", por isso quando queremos colocar uma barra invertida, em c,temos que usar \\;
[a-z] corresponde a qualquercaracter entre 'a' e 'z'. O + significa que o [a-z] pode pegar um ou mais caracteres.

[5] Comentário enviado por WhiteHawk em 03/01/2012 - 08:44h

@m4n14c, agradeço-lhe pela resposta.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts