Le site *
métacaractère dans BRE 1 s, ERE 1 et PCRE 1 correspond à 0 ou plusieurs occurrences du motif groupé précédent (si un motif groupé précède la balise *
), 0 ou plusieurs occurrences de la classe de caractères précédente (si une classe de caractères précède le métacaractère *
) ou 0 occurrence ou plus du caractère précédent (si ni un motif groupé ni une classe de caractères ne précède le métacaractère *
métacaractère) ;
Cela signifie que dans le This*String
étant le *
qui n'est pas précédé d'un motif groupé ou d'une classe de caractères, le métacaractère *
correspond à 0 ou plusieurs occurrences du caractère précédent (dans ce cas, le caractère s
caractère) :
% cat infile
ThisExampleString
ThisString
ThissString
% grep 'This*String' infile
ThisString
ThissString
Pour faire correspondre 0 ou plusieurs occurrences de n'importe quel caractère, vous voulez faire correspondre 0 ou plusieurs occurrences de la balise .
métacaractère, qui correspond à n'importe quel caractère :
% cat infile
ThisExampleString
% grep 'This.*String' infile
ThisExampleString
Le site *
dans les BRE et ERE est toujours "gourmand", c'est-à-dire qu'il correspondra à la correspondance la plus longue :
% cat infile
ThisExampleStringIsAString
% grep -o 'This.*String' infile
ThisExampleStringIsAString
Ce n'est peut-être pas le comportement souhaité ; dans le cas contraire, vous pouvez activer l'option grep
du moteur PCRE (en utilisant l'option -P
) et ajouter l'option ?
qui, lorsqu'il est placé après le métacaractère *
y +
Les métacaractères ont pour effet de modifier leur gourmandise :
% cat infile
ThisExampleStringIsAString
% grep -Po 'This.*?String' infile
ThisExampleString
1 : Expressions régulières de base, Expressions régulières étendues et Expressions régulières compatibles avec Perl