regexp

Vincent Lefevre vincent at vinc17.org
Tue Oct 25 15:00:48 CEST 2005


On 2005-10-24 18:05:43 +0200, Jeremy Monnet wrote:
> En bref, dans le poly de cours, il est marque : "
> Soit la regexp ^[^abc]*
> 
> Soit un fichier contenant :
> ascenseur
> chameau
> berceau
> elephant
> 
> la regexp selectionne toutes les lignes, a cause du principe de rendre
> muette une contrainte pour satisfaire la regexp globalement "

> J'ai cherche un peu pour trouver que finalement une regexp faisant ce
> qu'on lui demande (enfin ce que je crois etre le but de cette regexp :
> ne trouver que elephant) serait ^[^abc][a-z]*
> Mon impression est donc plutot que l'utilisation de l'etoile est
> mauvaise (mal placee)

En fait, il y a généralement deux contextes possibles, suivant les
applications: 1) soit une regexp doit matcher toute une ligne (ou
toute une chaîne), 2) soit elle peut matcher une partie de la ligne
(ou chaîne) seulement. En général, on est dans le cas 2, et on
utilise ^ et/ou $ pour matcher le début et/ou fin de la ligne.
Mais alors, teminer sa regexp par une sous-expression étoilée ne
sert à rien (sauf lors d'un remplacement).

> La question est donc : quel est ce principe de "rendre muette une
> contrainte pour satisfaire une regexp" ? Est-ce justifie dans ce
> contexte (ou ce que j'en ai compris) ?

Je pense qu'il veut dire que la regexp matche la sous-chaîne vide
située au début de chaque ligne. Par conséquent, toutes les lignes
sont sélectionnées. Il s'agit généralement d'un bug dans la regexp
(sauf en cas de remplacement, e.g. s/^[^abc]*/x/ puisqu'en général,
* est glouton, ou bien en cas de colorisation, par exemple avec
"grep --color").

-- 
Vincent Lefèvre <vincent at vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA



More information about the Shell mailing list