Match et non-match…
En cette période de coupe du monde de football 2010, quoi de plus naturel que de parler de match ? … Hum.
Problématique
Mon problème aujourd’hui, c’est de sélectionner les listes qui contiennent une certaines expression régulière, mais pas une autre. Plus exactement, et pour faire dans les anglicismes, je cherche « foo.* », mais pas « foobar ».
La solution
Il faut utiliser la forme suivante : (?!regexp)
pour choisir quelque chose qui ne match pas la regexp
en question.
Mon exemple en pratique :
$ echo -e 'foo\nfoobar\nfoofighting' | grep -P 'foo(?!bar)' foo foofighting
Plus d’informations disponible avec perldoc perlre, en particulier le chapitre sur les expressions régulières étendues (Extended Patterns)