2017-10-08 2 views
0

Quelqu'un peut-il expliquer ce que cela signifie par zéro occurrence lorsque nous utilisons * comme expression régulière en l'utilisant avec egrep ou grep?Zéro occurrence dans les expressions régulières (Unix)

Supposons que j'ai une expression comme: « a * »

Est-ce que cela signifie que j'ai un modèle qui commence par un ou AAAAA ..... ou bob ou at-il commencer par un?

+1

Si vous avez 'a *', cela signifie qu'il peut correspondre à n'importe quoi, car 'a *' peut correspondre à zéro caractère, c'est-à-dire une chaîne vide, et toutes les chaînes commencent par une chaîne vide. – Psidom

+0

Et si j'ai un * $? Est-ce que cela signifie qu'il doit se terminer avec au moins 1 "a"? – Lucifellow

+0

Non, il correspond toujours à n'importe quoi, car toutes les chaînes se terminent par une chaîne vide. Généralement, vous ne devriez pas construire une regex qui peut correspondre à un motif de longueur nulle. Il devrait au moins être «a + $» pour qu'il soit significatif. – Psidom

Répondre

0

Vous avez raison, a* correspondra bob, tout comme ^ba*o et ^boa*, puisque l'étoile Kleene correspond à zéro ou plusieurs occurrences. Voir le mot bazaar. Vous pouvez utiliser za*, zaa* ou zaaa*r pour l'associer. Pour insister sur une ou plusieurs occurrences, vous pouvez utiliser za+r. Pour deux ou plus, utilisez zaa+r. Pour insister exactement sur deux occurrences, utilisez za{2}r.