Usando expressões regulares no Linux com grep

2

Não consigo que essa expressão regular simples funcione para correspondência de e-mails:

'\w*(?:\.\w*)*@\w*(?:\.\w*)*\w\{2,5\}'

Deve estar funcionando como testei com regex pal e funciona muito bem. Eu acho que há um problema com a classe de personagem opcional mas não tenho certeza.

    
por burgeris 03.08.2011 / 13:32

1 resposta

1

Você deve usar o grep com expressão regular perl ( -P option) que suporta asserções lookahead como (?: ) . Também chaves não devem ser escapadas.

Tente:

grep -P '\w*(?:\.\w*)*@\w*(?:\.\w*)*\w{2,5}'

Como as expressões perl são um recurso experimental no GNU grep, você pode querer alterar (?: ) para ( ) e expressões estendidas do usuário ( -E ):

grep -E '\w*(\.\w*)*@\w*(\.\w*)*\w{2,5}'

Algumas das implementações de expressões estendidas não suportam chaves { e } . Para portabilidade, você pode usar expressões regulares básicas.

Para usar expressões regulares básicas, escape de ( e ) e deixe também { e } escaped.

grep '\w*\(\.\w*\)*@\w*\(\.\w*\)*\w\{2,5\}'
    
por 03.08.2011 / 14:47