Entendendo uma expressão egrep

1

Eu tropecei na seguinte expressão egrep:

egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' /usr/share/dict/words

nesta página: link

A expressão deve encontrar as palavras que contêm entre 5 e 7 vogais.

Eu entendo o primeiro ^ significado desde o início da linha e o segundo ^ para negar qualquer um dos aieou seguido por qualquer número de caracteres e um dos aeiou entre 5 e 7 vezes. Mas eu não entendi como as primeiras e últimas expressões: [^aieou]

    
por Ketan 04.12.2013 / 22:05

1 resposta

1

Ele procura zero ou mais consoantes ( [^aieou]* ) seguido por 5 a 7 vogais ( ([aieou]){5,7} ) seguidas por zero ou mais consoantes ( [^aieou]* ). Toda a expressão regular está ancorada no início da linha ( ^ ) e no final, ( $ ).

Exemplo

$ egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' \
        /usr/share/dict/words | head -10
abacinate
abacination
abacterial
abaisance
abalation
abalienate
abalienated
abalienating
abalienation
abandonable

Detalhes

Então, quando ele corresponde a essa primeira palavra, abacinate , a primeira letra a tem 0 consoantes à esquerda, então combinamos essa parte.

Como as vogais adicionais com zero ou mais consoantes são encontradas à esquerda e / ou à direita, também correspondemos a essas situações. Se encontrarmos de 5 a 7 deles, então combinamos.

    
por 04.12.2013 / 22:16