Regular Expression: como combinar 'ab', 'ac' e 'a'

3

Agora, eu tenho três strings para serem correspondidas por um único re - 'a', 'ab', 'ac' Eu suponho que um correto deve ser 'a [bc]?', Mas não parece correto. Qual é o correto?

Eu tento no comando grep. E parece que não há '?' na regex do grep. Então, como fazer essa correspondência no grep?

Graças a @anubhava, agora posso combinar todas essas três strings:

grep -E 'a[bc]?' <file>

No entanto, esta expressão também corresponde a 'ad'.

Na verdade, quero corresponder a todas essas situações: 'a', 'abc', 'ab', 'ac' mas não quer corresponder 'ad' ou 'ae'

    
por Xing Shi 17.06.2013 / 08:03

3 respostas

3

Se você quiser usar acima em um comando grep, use a opção de suporte de regex estendido -E com limites de palavras:

grep -E "\ba[bc]?\b" file

OR

grep -E "\<a[bc]?\>" file
    
por 17.06.2013 / 08:11
3

Para usar esta expressão no modo básico, você precisa escapar do ponto de interrogação:

grep 'a[bc]\?' file

Atualizar

Para resolver sua última pergunta, aconselho usar o modo P (erl):

grep -P 'a(?![de])|a[bc]|abc'

Estas são as alternativas:

  1. Corresponda um 'a' se não for seguido por 'd' ou 'e' (usa um resultado negativo)

  2. Corresponde a 'ab' ou 'ac'

  3. Corresponder 'abc'

por 17.06.2013 / 08:17
2

Se você quiser que a string corresponda à regex do começo ao fim, inclua na regex o início ^ e o final $ marcadores

^a[bc]?$

Se os marcadores não fizerem parte da regex, 123ab456 corresponderá à regex.

    
por 17.06.2013 / 08:06

Tags