Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as...
Transcript of Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as...
![Page 1: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/1.jpg)
Matemática Computacional
Expressões Regulares
![Page 2: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/2.jpg)
Introdução
• As expressões regulares definem as linguagens regulares de uma
forma declarativa (algo que um autômato finito não pode fazer). Ou
seja, as expressões regulares são a formalização algébrica de um
autômato finito1. Isso faz com que elas sirvam como linguagem de
entrada para diversos sistemas que processam strings, seja em
ferramentas do mundo UNIX, em um editor de textos ou até mesmo
em um SGBD. Com as expressões regulares podemos especificar
complexos padrões a serem pesquisados em um string.
1 – Sistema de Estados Finitos é a próxima matéria a ser vista.
![Page 3: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/3.jpg)
Origem
• Sua origem está em dois estudos, o primeiro teorizava o
funcionamento dos neurônios, o segundo demonstrava a descrição
algébrica de tais modelos. Só em 1968 um algoritmo de busca do
editor de textos qed para o UNIX veio a utilizar tal recurso e
posteriormente foi criada a ferramenta grep “Global (search for)
Regular Expression and Print” (Jargas, 2009).
Segundo Menezes (2000), uma linguagem é regular se, e se somente se, é possível construir
um autômato finito que reconheça tal linguagem.
![Page 4: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/4.jpg)
Conceitos básicos
• Alfabeto: conjunto finito de caracteres (um conjunto vazio também
pode ser considerado um alfabeto). É representado pelo símbolo Σ .
• Palavra: sequência finita de símbolos do alfabeto de forma adjacente.
A palavra vazia é representada pelo símbolo . Se Σ representa um
alfabeto, então Σ* representa o conjunto de todas as palavras possíveis
sobre o alfabeto. Já Σ+ representa o conjunto de todas as palavras do
alfabeto, exceto a palavra vazia, Σ+ = Σ*- { }.
• Tamanho ou comprimento: o número de símbolos que compõe uma
palavra w é representado por |w|.
• Para cada expressão regular E, descrevemos a linguagem que ela
denota por L(E).
![Page 5: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/5.jpg)
Operações
• União: o operador “+” serve para denotar tal operação.
Exemplo: L(E) = 01* + 10* denota todos os strings que são um
único zero seguido por qualquer número de 1’s ou um único 1
seguido por qualquer número de zeros.
• Concatenação: é o conjunto de strings que podem ser formados
tomando-se qualquer string de uma linguagem L e concatenando-se
esse string com qualquer string de uma linguagem M. Denotamos tal
operação com o operador “.” ou simplesmente não indicamos nenhum
operador.
Exemplo: L = {001, 10, 111} e M = { , 001}, então
LM é {001, 10, 111, 001001, 10001, 111001}
![Page 6: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/6.jpg)
Operações (continuação)
• Fechamento (estrela ou de Kleene): representa todos os conjuntos
de strings que podem ser formados, tomando-se qualquer número de
strings de L, possivelmente com repetições. Denota-se por L*
![Page 7: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/7.jpg)
Precedência de operadores
• O operador de fechamento tem a precedência mais alta, se aplicando
à menor sequência de símbolos à sua esquerda. Por isso recomenda-
se o uso de parênteses para reduzir a margem de erro.
• Em seguida na precedência temos o operador de concatenação e por
fim as uniões.
![Page 8: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/8.jpg)
Exemplo precedência de operadores
A expressão regular 01* não é o mesmo que (01)*, pois a primeira
expressão denota todos os strings iniciados por 0 e com um, vários ou
nenhum caractere 1. Já a segunda expressão representa todos os
strings com um caractere 0 seguido de um caractere 1, uma, várias ou
nenhuma vez.
L(E) = 01* , temos {0, 01, 011, 0111, ...}
L(E) = (01)* , temos { , 01, 0101, 010101, ...}
![Page 9: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/9.jpg)
Exemplos
• Expressão que representa todos os strings formados sobre o alfabeto
{a,b}, que contenham o substring bb.
L(E) = (a+b)*bb(a+b)*
• Expressão que representa a linguagem das palavras que tenha aa
como prefixo e bb como sufixo, sobre o alfabeto {a,b}.
L(E) = aa(a+b)*bb
• Expressão que representa todas as palavras que terminam com 00 ou
11, sobre o alfabeto {0,1}.
L(E) = (0+1)*(00+11)
![Page 10: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/10.jpg)
Exercícios
1. Utilizando as expressões regulares do slide anterior, apresente 5 strings
representados a partir de cada expressão.
2. Crie a expressão regular para cada notação formal das linguagens :
a) L = {w ∈ {a, b} | w inicia por b, seguido de zero ou mais a’s}
b) L = {w ∈ {a, b} | w termina por aa ou bb}
c) L = {w ∈ {a, b} | cada a em w é imediatamente precedido por um
b}
d) L = {w ∈ {a, b} | w tem abab como um substring}
e) L = {w ∈ {a, b} | w não possui dois a’s consecutivos}
f) L = {w ∈ {a, b} | w tenha exatamente dois b’s}
g) L = {w ∈ {0, 1} | w termine com 1 e |w| >=4}
h) L = {w ∈ {0, 1} | w tenha o número de 1’s múltiplo de três}
![Page 11: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/11.jpg)
Correção dos exercícios
• L = {w ∈ {a, b} | w inicia por b, seguido de zero ou mais a’s}L(E) = ba*
• L = {w ∈ {a, b} | w termina por aa ou bb}L(E) = (a+b)*(aa+bb)
• L = {w ∈ {a, b} | cada a em w é imediatamente precedido por um b}L(E) = (b+ba)*
• L = {w ∈ {a, b} | w tem abab como uma substring}L(E) = (a+b)*(abab)(a+b)*
• L = {w ∈ {a, b} | w não possui dois a’s consecutivos}L(E) = (a+ )(b+ba)*
• L = {w ∈ {a, b} | w tenha exatamente dois b}L(E) = a*ba*ba*
• L = {w ∈ {0, 1} | w termine com 1 e |w| >=4}L(E) = (0+1)(0+1)(0+1)+ 1
• L = {w ∈ {0, 1} | w tenha o número de 1’s múltiplo de três}L(E) = (0*10*10*10*)+
![Page 12: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/12.jpg)
Metacaracteres padrão UNIX
• As expressões regulares são formadas por símbolos com funções
especiais (metacaracteres) e caracteres literais.
• Na prática existem algumas diferenças entre a notação matemática e
a notação derivada dos sistemas UNIX. O caractere “+” era utilizado
para indicar a operação lógica “ou”, já como metacaractere padrão
UNIX é um símbolo quantificador, já o ponto “.” agora é utilizado como
uma espécie de caractere curinga que pode substituir qualquer
caractere.
![Page 13: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/13.jpg)
Alguns metacaracteres UNIX
Metacaractere Nome Função Tipo
. ponto subst. um caractere qualquer representantes
[] lista lista de caracteres permitidos representantes
[^] lista negada lista de caracteres proibidos representantes
? opcional zero ou um caractere quantificadores
* asterisco zero, um ou mais caracteres quantificadores
+ mais um ou mais caracteres quantificadores
{} chaves de n até m, exemplo: {n,m} quantificadores
\ escape torna literal um caractere outros
| ou ou um ou outro outros
() grupo delimita um grupo outros
- traço intervalo
![Page 14: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/14.jpg)
Exemplos com metacaracteres
• As chaves simulam
os metacaracteres
“*+?”, com elas é
possível especificar
um número exato
ou até mesmo uma
faixa numérica.
Expressão Casa com
n.o não,não, nzo, n3o, ...
11.30 11:30, 11 30, 11.30, 11y30, ...
<.> <x>, <k>, <m>,<4>, ...
n[aã]o nao, não
[Tt]eclado Teclado, teclado
11[:.]30 11:30, 11.30
<[aeiou]> <a>, <e>, <i>, <o> , <u>
fala[rs]? fala, falar, falas
5*2 2, 52, 552, 5552, ...
b[ip]* b, bi, bip, biip, bipp, bpipip,...
5+2 52, 552, 5552, 55552, ...
![Page 15: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/15.jpg)
Exemplos com metacaracteres(continuação)
Expressão Casa com
5+2 52, 552, 5552, 55552, ...
b[ip]+ bi, bp, bip, biip, ...
[0-9] 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
[0123456789] 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
[a-z]
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,
z
[A-Z] A,B,C,D,E,F,G,H,I,J,K,L,M,...,Z
[0-9A-Fa-f] Números hexadecimais !!
n[^pb] n2, nu, nx, na, nz, ...
[0-5]\. 0.,1.,2.,3.,4.,5.
• Conforme
Jargas(2009),
nunca tente
resolver uma
expressão regular
de uma só vez. É
preciso generalizar
e depois fazer os
refinamentos.
![Page 16: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/16.jpg)
Exercícios
3) Reescreva o exercício n° 2 (o que for possível) utilizando os metacaracteres
padrão UNIX.
4) Continue a aprimorar as seguintes expressões regulares abaixo:
a) Data no formato dd/mm/aaaa
ER: primeira versão: ../../....
aprimorando: [0-9]{2} / [0-9]{2} / [0-9]{4}Resposta: ((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))/((0[1-9])|(1[0-2]))/[0-9]{4}
b) Hora no formato hh:mm
ER: primeira versão: ..:..
aprimorando: [0-9]{2}:[0-9]
c) Telefone
ER: primeira versão: ....-....
![Page 17: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/17.jpg)
Exercícios
5) Crie as expressões regulares (utilizando os metacaracteres padrão
UNIX) para os seguintes itens:
a) CPF
b) e-mail
c) URL (endereços web com os domínios .com, .net, .edu, .gov, .nom,
todos eles do Brasil)
d) Nome de arquivo padrão MSDOS (começando por uma letra, com
8 caracteres e uma extensão de 3 caracteres)
![Page 18: Matemática Computacional Expressões Regulares. Introdução As expressões regulares definem as linguagens regulares de uma forma declarativa (algo que um.](https://reader035.fdocument.pub/reader035/viewer/2022062623/552fc0f8497959413d8b50f9/html5/thumbnails/18.jpg)
Dicas
• O GoogleDoc’s já possui o suporte à expressões regulares em localizar/substituir.
• No site www.regexpal.com é possível verificar online suas expressões.
• Referências sobre esse assunto:
Jargas, Aurélio Marinho, Expressões Regulares – Uma Abordagem Divertida. Rio de Janeiro:
Novatec, 2009.
Menezes, Paulo Fernando Blauth, Linguagens Formais e Autômatos. Porto Alegre: Sagra
Luzzatto, 2000.