Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Aprendendo expressões regulares

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Aprendendo expressões regulares

    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......
    Postado Originalmente por Wikiédia
    Em ciência da computação, uma expressão regular (ou o estrangeirismo regex, abreviação do inglês regular expression) provê uma forma concisa e flexível de identificar cadeias de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres. Expressões regulares são escritas numa linguagem formal que pode ser interpretada por um processador de expressão regular, um programa que ou serve um gerador de analisador sintático ou examina o texto e identifica partes que casam com a especificação dada.
    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.
    Código:
    ^ab
    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".
    Código:
    ia$
    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:
    \t = tabulação
    \n = quebra de linha
    \f = quebra de página
    \. = qualquer coisa
    \- = um hífen
    \\ = uma barra invertida de verdade
    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:
    [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.
    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?
    Código:
    ^a[a-z][a-z][a-z]a$
    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:
    [[: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)
    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:
    Código:
    ^a[a-z][a-z][a-z]a$
    Mas podemos fazer também da seguinte forma:
    Código:
    ^a[a-z]{3}a$
    O efeito é o mesmo. Veja outro exemplos:
    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)
    Também podemos usar a chamada alternação, usando o pipe ("|"). Ele equivale à palavra "ou". Por exemplo:
    Código:
    ^a|b = string iniciando com "a" ou "b"
    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:
    Código:
    ^[g-jG-J][a-z]{1,}(ia|va)$
    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:
    Código:
    ^(.+)@(.+).(.+)$
    Veja o código completo:
    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.
    }
    ?>
    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!
    Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



    Notify-list · Twitter · Blog

    Nova lei: Invadir computadores protegidos é crime.
    Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)
    Similar Threads

  • Font Size
    #2
    Estudei essa matéria na faculdade, e sei como é chat! Útil, mas chato! Parabéns pelo post.

    Comment


    • Font Size
      #3
      Chato? isto é demais...com apenas 2 ou 3 linhas da pra se fazer uma validação incrível. Se não existisse ER pra fazer uma validação bem feita de email, seria por exemplo no mínimo umas 10 linhas. Requer um pouco mais de determinação em aprender mais é muito útil. Parabéns pelo tuturial.

      Comment


      • Font Size
        #4
        Bom 0Kal, to começando a aprender expressões regulares, você tem alguma dica de livro ou curso de fácil intendimento para quem ta começando ?


        Notify-list ~ Twitter ~ E-mail

        Comment


        • Font Size
          #5
          Valeu, idsouza.
          É muito útil e nos ajuda bastante mesmo, mas diga aí: quando sai uma função como Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., que é que não usa? kkkkkkkk <s>povo preguiçoso</s>

          fopen, tem Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... muito interessante. A linguagem é em tom bem divertido
          Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



          Notify-list · Twitter · Blog

          Nova lei: Invadir computadores protegidos é crime.
          Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)

          Comment

          X
          Working...
          X