Академический Документы
Профессиональный Документы
Культура Документы
Histrico
A origem das expresses regulares esto na teoria dos autmatos e na teoria das linguagens formais, e
ambas fazem parte da teoria da computao. Esses campos estudam modelos de computao (autmatas) e
formas de descrio e classificao de linguagens formais. Na dcada de 1950, o matemtico Stephen Cole
Kleene descreveu tais modelos usando sua notao matemtica chamada de "conjuntos regulares",
formando a lgebra de Kleene. A linguagem SNOBOL foi uma implementao pioneira de casamento de
padres, mas no era idntica s expresses regulares. Ken Thompson construiu a notao de Kleene no
editor de texto QED como uma forma de casamento de padres em arquivos de texto. Posteriormente, ele
adicionou essa funcionalidade no editor de texto Unix ed, que resultou no uso de expresses regulares na
popular ferramenta de busca grep. Desde ento, diversas variaes da adaptao original de Thompson
foram usadas em Unix e derivados, incluindo expr, AWK, Emacs, vi e lex.
As expresses regulares de Perl e Tcl foram derivadas da biblioteca escrita por Henry Spencer, e no Perl a
funcionalidade foi expandida posteriormente.[1] Philip Hazel desenvolveu a PCRE (Perl Compatible Regular
Expressions), uma biblioteca usada por diversas ferramentas modernas como PHP e o servidor Apache.
Parte do desenvolvimento do Perl 6 foi melhorar a integrao das expresses regulares de Perl, e aumentar
seu escopo e funcionalidade para permitir a definio de gramticas de expresso de analisadores
sintticos.[2] O resultado foi uma mini-linguagem, as regras do Perl 6, usada para definir a gramtica do
Perl 6 assim como fornecer uma ferramenta para programadores da linguagem. Tais regras mantiveram as
funcionalidades de expresses regulares do Perl 5.x, mas tambm permitiram uma definio BNF de um
analisador sinttico descendente recursivo.
Aplicao em Ruby
Exemplo 1
Comearemos com a seguinte regex:
(19|20)\d\d([- /.])(0[1-9]|1[012])\2([012][0-9]|3[01])
Calma, calma. Vamos destrinchar cada parte dela e entender pra qu serviria.
Histrico 1
Expresso Regular
Na regex temos:
Ou seja, temos uma regex que casaria as datas dentro deste texto:
Poderamos substituir partes dessa regex para sermos mais especficos, como os itens 1. e 2. por um ano, 4.
por um ms e 6. por um dia. Falta validao pra evitar, por exemplo, que os dias 02-[30|31] sejam
encontrados.
Exemplo 2
Vejamos essa outra regex
\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z
Temos nela:
Essa regex seria uma das possveis para localizar um endereo de email dentro de um texto. Por exemplo:
Aplicao em Ruby 2
Expresso Regular
Perfil
Exemplo 3
Vejamos mais uma com aplicao direta em ruby:
reg =
Regexp.new(/^(?=.*\d)(?=.*([a-z]|[A-Z]))([\x20-\x7E]){8,40}$/
")
ou
reg = %r(^(?=.*\d)(?=.*([a-z]|[A-Z]))([\x20-\x7E]){8,40}$)
ou ainda
reg = /^(?=.*\d)(?=.*([a-z]|[A-Z]))([\x20-\x7E]){8,40}$/
Sendo
Hummm... isso t com cara de ser um validador de senha ... :D . Segundo essa regex a senha TEM que ter
nmeros e letras e entre 8 e 40 caracteres. A funo no Ruby ficaria assim:
def validate_password(password)
reg = /^(?=.*\d)(?=.*([a-z]|[A-Z]))([\x20-\x7E]){8,40}$/
end
Aplicao em Ruby 3
Expresso Regular
class MyModel
end
Como podemos ver, existem vrias maneiras de se casar caracteres, umas mais especficas e outras mais
gerais. Para alguns casos algumas no servem. necessrio, porm, verificar se a expresso casa ou deixa
de casar alguns caracteres especficos.
"Glossrio"
Tabela de metacaracteres
O que O que faz Exemplo (Busca) Resultado
Curinga (todos aato, Bato, -ato, ?ato,
. (ponto) .ato
caracteres) _ato, ...
Opcional (0 ou 1
? (interrogao) pr?ato pato, prato
alguma-coisa)
"Glossrio" 4
Expresso Regular
Caracteres em caixa
[:lower:] [a-z] abcdef ...
baixa
Caracteres de
[:punct:] [^\w\s] :); =(;
pontuao
Caracteres em caixa
[:upper:] [A-Z] ABCDEF...
alta
"Glossrio" 5
Expresso Regular
Referncias
Wikipedia pt-BR
Wikipedia en
Exemplo 3
Referncias 6