27
Expressões Regulares

Expressões Regulares - Final

Embed Size (px)

Citation preview

Page 1: Expressões Regulares - Final

Expressões Regulares

Page 2: Expressões Regulares - Final

Metacaracteres tipo barra-letraOs metacaracteres do tipo barra-letra são átomos representados por uma barra

invertida \ seguida de uma letra qualquer, como \s e \W.

Dependendo da letra, muda-se o significado desse metacaractere.

Tudo começou nas linguagens de programação com os printf da vida, que

começaram a interpretar coisas, como \n e \t, para significar quebra de linha e TAB,

pois visualmente é ambíguo se "1 2" é um, TAB, dois ou um, espaços, dois.

Page 3: Expressões Regulares - Final

Metacaracteres tipo barra-letraEssa representação simplificada e útil se tornou padrão e hoje a grande maioria dos

aplicativos os entende.\a alert alert(bipe)

\b backspace caractere backspace

\e escape catacatere ESC

\d form feed alimentação

\n new line nova linha

\r carriage return retorno de carro

\t htab tabulação horizontal

\v vtab tabulação vertical

Page 4: Expressões Regulares - Final

Metacaracteres tipo barra-letraComo esses barra-letras também poderiam ser muito úteis para escrever nossas

expressões regulares, os robozinhos começaram a ter suporte a eles também, ou senão

a linguagem recebe a ER como um dado do tipo string e os interpreta, passando ao

robozinho seus valores literais.

Page 5: Expressões Regulares - Final

Metacaracteres tipo barra-letra

b-l Equivalente POSIX Significa

\d [[:digit:]] Dígito

\D [^[:digit:]] Não-digito

\w [[:alnum:]_] Palavra

\W [^[:alnum:]_] Não-palavra

\s [[:space:]] Branco

\S [^[:space:]] Não-branco

Page 6: Expressões Regulares - Final

Metacaracteres tipo barra-letraA grande diferença desses barra-letras para as classes POSIX, é que eles são válidos

fora das listas.

Dependendo do aplicativo, eles são válidos dentro das listas também, bagunçando

aquela regra que vimos de que dentro da lista todo mundo é normal. Dependendo

também, o sublinhado faz parte ou não do \w.

Page 7: Expressões Regulares - Final

Exemplos de expressões

Page 8: Expressões Regulares - Final

dd/mm/aaaa

Expressão Math

../../.... 12/05/1987, 99/99/9999

[0-9]{2}/[0-9]{2}/[0-9]{4} 10/10/2016, 99/99/9999

[0123][0-9]/[0-9]{2}/[0-9]{4} 10/10/2016, 19/99/9999

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

Page 9: Expressões Regulares - Final

hh:mm

Expressão Math

..:.. 10:10, 99:99

[0-9]{2}:[0-9]{2} 10:10, 99:99

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

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

Page 10: Expressões Regulares - Final

[email protected]

Expressão Math

.*@.* [email protected], usuario@, usuario@email

[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4} [email protected]

Page 11: Expressões Regulares - Final

telefone celular - xxxxx-xxxx

Expressão Math

…..-.... 99999-9999, aaaaa-bbbb

[0-9]{5}-[0-9]{4} 99999-9999

Page 12: Expressões Regulares - Final

Regex engine - Baseadas em autômatos finitosProcessam mais rápido

Criam uma máquina de estado, alimentando-a com os caracteres de entrada.

Aplicações

Posix / GNU ERE / BRE - Usado na maioria dos utilitários Unix, como grep, sed e awk.

RE2 - Um projeto relativamente novo para tentar dar mais poder para o método baseado em autômatos.

Page 13: Expressões Regulares - Final

Regex engine - Baseados em back-tracking

Compila o padrão em byte-code, semelhante a instruções da máquina.

O mecanismo então executa o código, saltando de instrução à instrução.

Aplicações:

Perl - O original. A maioria dos outros motores deste tipo tentam replicar a funcionalidade de regexes na

linguagem Perl.

PCRE - A implementação mais bem sucedida. Esta biblioteca é a implementação mais amplamente utilizada.

Ele tem um rico conjunto de recursos, alguns dos quais não podem ser considerados como "Regular"

mais.

Python , o Ruby , Java , .NET

Page 14: Expressões Regulares - Final

Funcionamento do engine[a-z]

[a-z]*

[a-z]+

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

Page 15: Expressões Regulares - Final

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

[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}

Page 16: Expressões Regulares - Final

PHP (PCRE)Característica Como fazer

Busca função preg_match

Substituição função preg_replace

Divisão função preg_split

ER crua 'entre aspas simples'

Ignore M/m Modificadores i (?i)

Global é o padrão

Page 17: Expressões Regulares - Final

PHP (PCRE)

Funções PCRE Objetivo

preg_filter Substituição condicional

preg_grep Retorna opções de um array

preg_last_error Código de erro da última expressão executada

preg_match_all Casa globalmente e retorna o resultado

preg_match Casa e retorna o resultado

preg_quote Escapa metacaracteres

preg_replace_callback Substituição usando função

preg_replace Substituição

preg_split Divisão

Page 18: Expressões Regulares - Final

Diferença entre PCRE e POSIXAs funções preg(PCRE) utilizam a biblioteca PCRE, que a partir da versão 5.3 do PHP

não pode ser desabilitada, sendo assim, estará sempre presente, essas funções são

compatíveis com estilo PERL e possuem características não disponíveis nas

funções ereg(POSIX).

A partir da versão 5.3 do PHP as funções ereg(POSIX) foram marcadas como

deprecated, ou seja, tornaram-se obsoletas e seu uso é desencorajado, além disso

toda vez que são utilizadas é lançado um notice do tipo E_DEPRECATED.

Page 19: Expressões Regulares - Final

Exemplo

PHP Descrição Resultado

<?php$cep = '22710-045';$names = array('Diogo', 'Renato', 'Gomes', 'Thiago', 'Leonardo'); $er = '/^(\d){5}-(\d){3}$/'; if(preg_match($er, $cep)) { echo "O cep casou com a expressão."; }

$er = '/go/i';$pregReplace = preg_replace($er, 'GO', $names);print_r($pregReplace); $er = '/go$/';$pregFilter = preg_filter($er, 'GO', $names);print_r($pregFilter); $er = '/^go/i';$pregGrep = preg_grep($er, $names);print_r($pregGrep);

?>

Validação de CEP

Busca e substitui nomes que tenham "go", case-insensitive

Busca e substitui nomes que terminam com "go"

Resgatar nomes que começam com "go", case-insensitive

O cep casou com a expressão.

DioGO, Renato, GOmes, ThiaGO, Leonardo

DioGO, ThiaGO

Gomes

Page 20: Expressões Regulares - Final

Exemplo

PHP Descrição Resultado

<?php

$names = array('Diogo', 'Renato', 'Gomes', 'Thiago', 'Leonardo');$text = 'Lorem ipsum dolor sit amet, consectetuer adipiscing.';

$er = '/[[:punct:]\s]\s*/';$pregSplit = preg_split($er, $text);print_r($pregSplit);

$callback = function($matches) { return strtoupper($matches[0]);};

$er = '/(.*)go$/';$pregCallback = preg_replace_callback($er, $callback, $names);print_r($pregCallback); ?>

Divide o texto por pontos e espaços, que podem ser seguidos por espaços

callback, retorna em letras maiúsculas

Busca e substitui de acordo com o callback

Array de palavras

DIOGO, Renato, Gomes, THIAGO, Leonardo

Page 21: Expressões Regulares - Final

HTML 5No seu site ou aplicativo Web, se você digitar o CPF é necessário verificar se foi digitado corretamente. Como o formato é padronizado (nnn.nnn.nnn-nn), basta escrever uma expressão regular e tentar casá-la com o texto digitado.

Veja um Exemplo utilizando JavaScript.

Page 22: Expressões Regulares - Final

HTML 5

Page 23: Expressões Regulares - Final

HTML 5Funciona, mas é muito trabalhoso para fazer uma simples validação correto, imagine possuímos mais campos para validação. ex: nome, idade, e-mail, CNPJ, url etc. Outro problema é que a maneira de informar ao usuário sobre o erro (um alert() no exemplo) não é padronizada, cada site faz de um jeito. Porém apesar de todos os esforços se o usuário desativar o JavasScript, então nada funcionará.

O HTML 5 criou uma nova maneira de fazer essa validação, que é colocar a expressão regular diretamente no campo em questão, usando o novo atributo pattern.

Veja como fica o exemplo anterior.

Page 24: Expressões Regulares - Final

HTML 5

E pronto! sem JavaScript, sem evento onsubmit, sem DOM, sem alert()resumindo, sem complicações. É o navegador que verificará se o texto digitado casa com a expressão e, se necessário avisará o usuário que há algo errado, de maneira padronizada. Use o atributo title para definir a mensagem que será mostrada ao usuário em caso de erro.

Page 25: Expressões Regulares - Final

HTML 5

Page 26: Expressões Regulares - Final

Ferramentas para testeshttp://regexr.com/

http://www.regextester.com/

http://regexstorm.net/tester

https://regex101.com/

https://www.debuggex.com/

http://regexlib.com/Search.aspx

Page 27: Expressões Regulares - Final

Referênciashttp://www.diogomatheus.com.br/blog/php/expressoes-regulares-no-php/

http://turing.com.br/material/regex/introducao.html

http://www.devmedia.com.br/expressoes-regulares-em-php/25076

http://aurelio.net/regex/guia/

JARGAS, Aurelio Marinho. Expressões Regulares: Uma abordagem divertida. 4.ed. São Paulo: Novatec, 2012.

224p.

JARGAS, Aurelio Marinho. Expressões Regulares: Uma abordagem divertida. 3.ed. São Paulo: Novatec, 2009.

207p.