Alguém pode explicar essa expressão peça por peça, por favor? grep '\([aeiou]\).\1'

Alguém pode explicar essa expressão peça por peça, por favor? grep '\([aeiou]\).\1'

Encontrei esta expressão para uma tarefa de casa que irá "imprimir todas as linhas contendo uma vogal (a, e, i, o ou u) seguida por um único caractere seguido pela mesma vogal novamente. Assim, encontrará “véspera” ou “adam”, mas não “vera”. A expressão funciona corretamente, mas procuro alguém que possa explicar o que cada parte faz para que eu possa entender melhor como funciona.

Responder1

Em primeiro lugar, pesquise no Google por sites regex. Eles vão te ajudar muito. Por exemplo, tente regexone.

Em segundo lugar, para testar ou ajudar no entendimento de regexes, consulte regex101.com - isso pode te ajudar bastante, pois explica passo a passo o que acontece; você também pode testar expressões regulares.

Agora, quanto à expressão:

[aeiou]

corresponde a qualquer um dos caracteres entre colchetes (aqui: a, e, i, o ou u).

.

corresponde a qualquer caractere único

\1

corresponde ao primeiro grupo de captura.

\(anything\)

é um grupo de captura.

Grupo de captura é o nome de uma string que você pode lembrar para uso posterior. Neste caso, capturar qualquer caractere de [aeiou] nos permite lembrar o que combinamos. Se escrevêssemos este regex:

[aeiou].[aeiou]

não teríamos como verificar se a primeira e a segunda vogal eram iguais.

Portanto, seu regex significa "Corresponder a qualquer um dos caracteres de" aeiou ", depois a qualquer caractere único e ao que quer que tenha sido o primeiro caractere".

Responder2

Primeiro, o \(e \). Isso significa que "qualquer coisa dentro desses parênteses escapados é um grupo e pode ser referenciado como tal posteriormente na expressão". Dentro disso você tem [aeiou], que significa "qualquer um dos caracteres a, e, i, o, ou u". O ponto único, ., significa "qualquer caractere único". O \1meio significa "Aquilo que você encontrou quando combinou no primeiro grupo".

informação relacionada