• Nenhum resultado encontrado

Aula 4 - Expressões Regulares

N/A
N/A
Protected

Academic year: 2021

Share "Aula 4 - Expressões Regulares"

Copied!
28
0
0

Texto

(1)
(2)

Quantos de nós já necessitaram fazer manipulação ou pesquisas em textos? Quantos perderam horas com ifs e fors tentando procurar palavras baseadas em um determinado padrão?

As expressões regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rápida e precisa.

(3)

Um dos melhores materiais, didáticos, em português (se não o melhor) sobre este assunto é o livro em que a maior parte teórica, sobre expressões regulares, desta apresentação está embasada: Expressões regulares – Uma abordagem divertida de Aurélio Marinho Jargas.

A maioria do material sobre expressões regulares em português encontrado na internet é baseado no livro dele.

Esta apresentação irá introduzi-lo neste assunto, fazendo expressões como *[A-Za-z0-9_]+:(.*)..$ se tornarem compreensivas e não lhe causar pânico.

(4)

“Uma expressão regular é um método formal de se especificar um padrão de texto.”

De forma simplificada, uma regular expression, termo original, é uma

composição de símbolos e caracteres literais com funções definidas que quando agrupadas em sequência formam uma expressão.

Essa, por sua vez, é interpretada, por um programa, como uma regra que resultará em sucesso caso uma entrada de dados atenda suas condições. Também podemos afirmar que é:

 “uma maneira de procurar um texto que você não lembra exatamente como é, mas tem ideia das variações possíveis;

 uma maneira de procurar um trecho em posições específicas como no começo ou no fim de uma linha, ou palavra;

 uma maneira de um programador especificar padrões complexos que podem ser procurados e casados em uma cadeia de caracteres”;

(5)

Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios

Em 1968 foi para o computador em um algoritmo de busca para um editor chamado qed

O qed virou ed (Editor Unix) que devido a seu comando de executar expressões regulares originou o famoso grep que por sua vez originou o egrep

(6)

“Basicamente servem para você dizer algo abrangente de forma específica.

Definido seu padrão de busca, você tem uma lista (finita ou não) de possibilidades de casamento.

Em um exemplo rápido, [rgp]ato pode casar rato, gato e pato. Ou seja, sua lista "abrange especificamente" essas três palavras, nada mais.”

Sempre que precisar efetuar buscas ou validações em textos, as expressões regulares funcionam muito bem. Alguns exemplos de buscas por padrões, em textos, são:  data  horário  número IP  endereço de e-mail  endereço de Internet

 dados na coluna N de um texto

 dados que estão entre <tags></tags>  campos específicos de um texto tabulado

(7)

São símbolos com funções específicas utilizados para montar

as expressões regulares.

Existem vários tipos de metacaracteres, os básicos serão

estudados nesta apresentação:

Representes: representam um ou mais caracteres

Quantificadores: indicam o número de repetições

permitidas para o caractere anterior

(8)

“O ponto é nosso curinga solitário, que está sempre à procura de um casamento, não importa com quem seja. Pode ser um número, uma letra, um TAB, um @, o que vier ele traça, pois o ponto casa qualquer coisa.”

(9)

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo...

(10)

O ponto não aceita qualquer coisa?

Dentro da lista, todos os caracteres são normais

(11)

O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]

Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...

“Os intervalos respeitam a ordem numérica da tabela ASCII”

O traço colocamos no final da lista sozinho;

O colchete de abertura ( [ ) pode colocar em qualquer lugar;

O colchete de fechamento ( ] ) deve ser colocado no começo da lista;

Exemplo: [ ][ - ]

Como colocar o traço e os

colchetes dentro da lista se

eles são metacaracteres?

(12)

Peraí! Na tabela ASCII a-z não

entram as palavras acentuadas, e

agora?

Dá para resolver isto com alguns

curingas, mas...

...Vamos conhecer as classes de

caracteres POSIX

(13)

Os colchetes fazem

parte da classe

POSIX.

Uma classe dentro

de uma lista ficaria

assim:

[[:upper:]]

IMPORTANTE

: As

classes POSIX levam

em consideração a

localidade.

(14)

“Nem tão exigente quanto a lista nem tão necessitada quanto o ponto, temos a lista negada, que pelas suas más experiências passadas, sabe o que não serve para ela casar.”

A lista negada é igual a lista comum, a única diferença é que ela aceitará todos os caracteres que NÃO tiverem dentro da lista. Ex: l[^aeioAEIO]a – lua, l1a, lpa...

IMPORTANTE: A lista negada não casa com espaço vazio. No exemplo acima ela NÃO aceitaria l a (l, espaço, a). É necessário ter um caractere diferente.

Deve ser colocado no final. Ex: [^:a-z123^]

Como colocar o ^ dentro da

lista se eles são

(15)

“O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou não a ocorrência da entidade anterior, pois ele a repete 0 ou 1 vez.”

(16)

“Se o opcional já não esquenta a cabeça, podendo ter ou não a

entidade anterior, o asterisco é mais tranqüilo ainda, pois para ele

pode ter, não ter, ou ter vários, infinitos. Em outras palavras, a

entidade anterior pode aparecer

em qualquer quantidade

.”

Um curinga na manga

Vimos o metacaractere . (ponto) que aceita qualquer caractere.

Agora vimos o metacaractere * (asterisco) que aceita em qualquer

quantidade. Olhe e pense na seguinte expressão:

(17)

“A única diferença [do mais e do asterisco] é que o

mais não é opcional, então a entidade anterior deve

casar pelo menos uma vez, e pode ter várias.”

(18)

“As chaves são a solução para uma quantificação mais

controlada, onde se pode especificar exatamente quantas

repetições se quer da entidade anterior.”

EX: a{1,2} – a, aa

(19)

“O nosso amigo circunflexo marca o começo de uma linha. Nada mais.”

Dentro da lista (e no início) o ^ tem o objetivo de negar seu conteúdo.

Fora da lista ele serve para marcar que a palavra deve ser encontrada

exatamente no início da linha. EX: ^[a-zA-Z].

Este metacaractere só é especial se tiver no começo da expressão

regular. Se eu quiser procurar uma palavra que começe com ^ poderia

fazer assim:

^^

Está gostando? Faltam apenas mais dois âncoras para finalizar a parte

teórica desta apresentação.

(20)

“Similar e complementar ao circunflexo, o cifrão marca o fim de

uma linha e só é válido no final de uma ER.”

Que tal procurar por uma linha vazia? ^$

E uma linha que tenha entre 20 e 60 caracteres? ^.{20,60}$

As expressões estão ficando mais claras, não? Vamos finalizar

o último metacaractere agora.

(21)

“A outra âncora que temos é a borda, que como o próprio nome já diz,

marca uma borda, mais especificamente, uma borda de palavra.”

Basicamente ela marca onde começa e onde termina uma palavra.

Simples assim! Veja:

“Palavra” aqui engloba [A-Za-z0-9_], ou seja, letras, números e

sublinhados. Por isto no exemplo acima \bdia\b aceitou bom-dia!,

devido a exclamação e o traço não fazerem parte de uma palavra. Em

alguns aplicativos o _ também não faz. =)

(22)
(23)

Editores de texto e IDEs

Dreamweaver

Google Docs

URLs amigáveis

(24)

Escreva uma expressão regular que:

1. Reconheça a palavra carro minúscula, no plural, singular e em qualquer parte de um texto.

2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto.

3. Reconheça um número de IP, que aceite 999.999.999.999 Dica: O metacaracter “\” torna outro metacaractere literal.

OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma simples o entendimento da aplicação de expressões regulares e os operadores aprendidos nesta parte.

(25)

1. Reconheça a palavra carro no plural e no singular.

“carros?”

2. Reconheça a palavra casa em qualquer combinação de maiúscula

e minúscula.

“[cC][aA][sS][aA]”

3. Reconheça um número de IP.

“[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]”

(26)

4 – Faça o reconhecimento via expressões

regulares de:

A) Data (dd/mm/aaaa)

B) Horário (hh:mm)

(27)

4)

A) Data (dd/mm/aaaa)

../../..

[0-9]{2}/[0-9]{2}/[0-9]{4}

[0123][0-9]/[01][0-9]/[12][0-9]{3}

([012][0-9]|3[0-1])/([0[0-9]|1[012])/[12][0-9]{3}

(0[1-9]|[12][0-9]|3[01])/0[0-9]|1[012])/[12][0-9]{3}

B) Horário (hh:mm)

..:..

[0-9]{2}:[0-9]{2}

[012][0-9]:[0-5][0-9]

([01][0-9]|2[0-3]):[0-5][0-9]

C) Email (email@company.com)

.*@.*

[^@]+@[^@]+.[.*]

[A-Za-z0-9_.-]+@[A-Za-z0-9_]+\.[a-z]+

[A-Za-z0-9_.-]+@[A-Za-z0-9_]+\.[a-z]{2,3}

(28)

Livro: Expressões regulares – Uma abordagem divertida

http://aurelio.net/

http://pt.wikipedia.org/wiki/Express%C3%A3o_regular

Referências

Documentos relacionados

O problema central do agir consiste em procurar compreender a diferença entre os acontecimentos que têm lugar em mim e aqueles sobre os quais eu tenho controlo e que, por

Os métodos estatísticos para análise de dados podem ser classificados como métodos descritivos (Estatística descritiva) e métodos inferenciais (Estatística

Deste modo, o adequado zoneamento e sua observância são fundamentais para a conciliação da preservação ou conservação de espécies, hábitats e paisagens dentre outras e

Portanto não deveria ser estranho, para um estudioso de Peirce, aceitar o convite de subir no “bote do musement ” e imaginar que os conceitos da Ética, que valem

(2015) diz que as cirurgias torácicas e abdominais altas são procedimentos que geram medo e dúvidas ao paciente, portanto um programa de educação em saúde é de

Apothéloz (2003) também aponta concepção semelhante ao afirmar que a anáfora associativa é constituída, em geral, por sintagmas nominais definidos dotados de certa

A abertura de inscrições para o Processo Seletivo de provas e títulos para contratação e/ou formação de cadastro de reserva para PROFESSORES DE ENSINO SUPERIOR

A imagem é uma das principais formas de comunicação dos seres humanos (PETERMANN, 2006) e fundamental na leitura e compreensão do mundo (MUSSOI, 2008). Por isso, vem sendo