Não vou mentir. O que veremos aqui é extremamente chato.
Fácil é sim, mas é muito cansativo. Mas, fazer o quê..., é extremamente útil.
Segundo a Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar......
Ou seja, se temos o conjunto {guia,ria,lia,abria,olhava,procurava} e programamos, pela RegEx, um sistema que procurasse a expressão "ava", obteremos as duas últimas palavras. Já com a expressão "ia", obteremos as três primeiras.
Pode ser chamada de ER, Ereg, RegEx ou RegExp. Em suma, são uma maneira simples para manusear strings.
Vamos procurar entender isso. Iniciando do início, vamos conhecer a sintaxe.
O operador "^" indica que a string que se procura deve começar com o conteúdo logo após o mesmo. No exemplo acima, procuramos um ítem que inicie com "ab". Dentro de nosso conjunto, teríamos "abria".
Já o operador "$" faz exatamente o contrário do que vimos acima. Ele indica a finalização do que procuramos. Com este exemplo, teríamos as 3 últimas palavras do nosso conjunto.
Também podemos representar outros ítens utilizando a barra invertida (\), nosso caractere de escape. Veja:
A lista é um pouco grande. Você pode encontrar uma lista completa em outro lugar, mas aqui vamos ver a sintaxe.
Vamos aprender agora a procurar por uma classe de caracteres, ou seja, uma string que não sabemos qual é, mas que esteja em nosso padrão. Veja um exemplo:
[code][AaEeIiOoUu][/quote]
Com isso, procuramos apenas vogais maiúsculas e minúsculas.
Mas é claro que você não sairia por aí digitando letra por letra. Você pode usar os intervalos de caracteres. Veja:
Vale lembrar que isto serve apenas para um único caractere. Outra coisa interessante a saber é que RegEx são case-sensitive (sensíveis ao caso), ou seja, diferenciam maiúsculas de minúsculas.
Diga: do nosso conjunto dito acima, que ítem acharíamos com a RegEx abaixo?
Acertou quem disse "abria", já que pedimos algo que começasse com "a", tivesse 3 caracteres minúsculos de "a" a "z" e terminasse com "a".
Mas, também temos as classes nativas, padrão, pré-definidas ou como queira chamar. Veja:
Mas, quer dizer que quando formos procurar palavras com RegEx, temos que repetir uma parte diversas vezes, já que é comum termos palavras grandes? Não. Por exemplo, no nosso exemplo, procuramos a palavra "abria" da seguinte forma:
Mas podemos fazer também da seguinte forma:
O efeito é o mesmo. Veja outro exemplos:
Também podemos usar a chamada alternação, usando o pipe ("|"). Ele equivale à palavra "ou". Por exemplo:
Vamos utilizar agora nosso conjunto que declaramos no início do tutorial: {guia,ria,lia,abria,olhava,procurava}
Queremos detectar palavras iniciadas em uma letra de "g" até "j" minúscula ou maiúscula (g, h, i e j), com 1 ou mais letras minúsculas no meio e terminadas em "ia" ou "va". Faríamos assim:
Simples, não? Explicando:
^[g-jG-J] = "iniciadas em uma letra de "g" até "j" minúscula ou maiúscula"
[a-z]{1,} = "1 ou mais letras minúsculas no meio"
(ia|va) = "terminadas em 'ia' ou 'va'"
Ficou mais simples?
Agora, mais interessante que saber algo, é saber porque se deve aprender este algo. RegEx são universais, a maioria das linguagens de programação atuais o suportam. Em WEB, por exemplo, vemos um exemplo de seu uso no RewriteModule do Apache, que permite criar URL's amigáveis, e também neste problema: "detectar se um e-mail é válido ou não". Vamos resolvê-lo?
Poderíamos usar vários explodes(), strpos() e outras funções, mas como temos que ser rápidos, pois estamos com prazo de entrega do projeto, vamos usar as RegEx.
Vamos verificar se o e-mail possui:
(qualquer coisa)@(qualquer coisa).(qualquer coisa)
Para isso, fazemos:
Veja o código completo:
Isto foi só um tutorial básico. Você não aprenderá e se tornará o prefeito de RegExCity apenas com isso, e sim, com a prática.
Até a próxima!
Fácil é sim, mas é muito cansativo. Mas, fazer o quê..., é extremamente útil.
Segundo a Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar......
Postado Originalmente por Wikiédia
Pode ser chamada de ER, Ereg, RegEx ou RegExp. Em suma, são uma maneira simples para manusear strings.
Vamos procurar entender isso. Iniciando do início, vamos conhecer a sintaxe.
Código:
^ab
Código:
ia$
Também podemos representar outros ítens utilizando a barra invertida (\), nosso caractere de escape. Veja:
\t = tabulação
\n = quebra de linha
\f = quebra de página
\. = qualquer coisa
\- = um hífen
\\ = uma barra invertida de verdade
\n = quebra de linha
\f = quebra de página
\. = qualquer coisa
\- = um hífen
\\ = uma barra invertida de verdade
Vamos aprender agora a procurar por uma classe de caracteres, ou seja, uma string que não sabemos qual é, mas que esteja em nosso padrão. Veja um exemplo:
[code][AaEeIiOoUu][/quote]
Com isso, procuramos apenas vogais maiúsculas e minúsculas.
Mas é claro que você não sairia por aí digitando letra por letra. Você pode usar os intervalos de caracteres. Veja:
[a-z] = Qualquer letra minúscula
[A-Z] = Qualquer letra maiúscula
[a-zA-Z] = Qualquer letra, maiúscula ou minúscula
[0-9] = Qualquer dígito
[0-9.-] = Qualquer dígito, ponto ou hífen.
[A-Z] = Qualquer letra maiúscula
[a-zA-Z] = Qualquer letra, maiúscula ou minúscula
[0-9] = Qualquer dígito
[0-9.-] = Qualquer dígito, ponto ou hífen.
Diga: do nosso conjunto dito acima, que ítem acharíamos com a RegEx abaixo?
Código:
^a[a-z][a-z][a-z]a$
Mas, também temos as classes nativas, padrão, pré-definidas ou como queira chamar. Veja:
[[:alpha:]] = qualquer letra
[[:digit:]] = qualquer dígito
[[:alnum:]] = qualquer letra ou dígito
[[:space:]] = espaço (" ")
[[:upper:]] = letra maiúscula
[[:lower:]] = letra minúscula
[[unct:]] = qualquer pontuação (!, ?, . etc)
[[:xdigit:]] = qualquer hash hexadecimal (exemplo: 0x3c3d3e - <=> - números de 0 a 9 e letras de A a F maiúsculas ou minúsculas)
[[:digit:]] = qualquer dígito
[[:alnum:]] = qualquer letra ou dígito
[[:space:]] = espaço (" ")
[[:upper:]] = letra maiúscula
[[:lower:]] = letra minúscula
[[unct:]] = qualquer pontuação (!, ?, . etc)
[[:xdigit:]] = qualquer hash hexadecimal (exemplo: 0x3c3d3e - <=> - números de 0 a 9 e letras de A a F maiúsculas ou minúsculas)
Código:
^a[a-z][a-z][a-z]a$
Código:
^a[a-z]{3}a$
Código:
[a-z]{5} = 5 letras minúsculas ^abc{4}$ = palavra começada com "abcabcabcabc" (4 vezes "abc") ^a{2,4}$ = palavra começada com "abc" se repetindo de 2 a 4 vezes ^[a-z]{4,}$ = palavra contendo 4 ou mais letras minúsculas ^abc+ = palavra começada com "ab" e "c" uma vez apenas ou se repetindo infinitas vezes (abccc, abcccc etc) ^(abc)+ = palavra que começa com "abc" se repetindo infinitas vezes (abcabc, abcabcabc etc) ^ab? = começando com "a" seguido de "b" uma vez ou não seguido de "b" (nenhuma ocorrência) ^(ab)*** = começando com "ab" 3 ou mais vezes (repete-se o asterisco a cada vez mínima)
Código:
^a|b = string iniciando com "a" ou "b"
Queremos detectar palavras iniciadas em uma letra de "g" até "j" minúscula ou maiúscula (g, h, i e j), com 1 ou mais letras minúsculas no meio e terminadas em "ia" ou "va". Faríamos assim:
Código:
^[g-jG-J][a-z]{1,}(ia|va)$
^[g-jG-J] = "iniciadas em uma letra de "g" até "j" minúscula ou maiúscula"
[a-z]{1,} = "1 ou mais letras minúsculas no meio"
(ia|va) = "terminadas em 'ia' ou 'va'"
Ficou mais simples?
Agora, mais interessante que saber algo, é saber porque se deve aprender este algo. RegEx são universais, a maioria das linguagens de programação atuais o suportam. Em WEB, por exemplo, vemos um exemplo de seu uso no RewriteModule do Apache, que permite criar URL's amigáveis, e também neste problema: "detectar se um e-mail é válido ou não". Vamos resolvê-lo?
Poderíamos usar vários explodes(), strpos() e outras funções, mas como temos que ser rápidos, pois estamos com prazo de entrega do projeto, vamos usar as RegEx.
Vamos verificar se o e-mail possui:
(qualquer coisa)@(qualquer coisa).(qualquer coisa)
Para isso, fazemos:
Código:
^(.+)@(.+).(.+)$
Código PHP:
<?
$email = $_POST['email']; // pegamos o e-mail digitado no formulário
$queremos = "^(.+)@(.+).(.+)$"; // aqui temos nossa RegEx
// vamos usar a função ereg(). mais informações: http://br.php.net/ereg
if (!ereg($queremos, $email)) { // lembrando que o ! torna a condição negativa. neste caso, queremos saber se não foi encontrado nada
echo "Seu e-mail é inválido. Pensa que me engana, é? Otário... Eu uso RegEx, amigo.";
} else {
// aqui entram os códigos do que o cara vai fazer. Como isto é um exemplo, não faremos nada.
}
?>
Até a próxima!
Comment