Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.perl

Programmation.perl : Regexp

Posté par lom (page perso, ) le 25 mai 2005
Bonjour à tous,

J'ai un problème d'expression régulière.
Je veux une expression qui reconnaisse par exemple "lockdev-1.0.0-1.2" mais pas "lockdev-devel-1.0.0-1.2". (Après, ce sera à généraliser pour d'autre termes que lockdev, mais ce ne sera plus un problème).

Cette expression sera utilisée dans une syntaxe du style:


if ("lockdev" =~ /$maJolieExpression/) {
print "OK\n";
}
else {
print "KO\n";
}


Cela interdit l'usage de syntaxe du style !~ ou des if imbriqués.

Ce que j'ai tenté, mais qui ne passe pas:
/lockdev(^-devel)/
/lockdev.*[^(-devel)]/
/lockdev.*[^\(-devel\)]/
/lockdev.*(-devel){0}/

avec différents modificateurs de gloutonnerie.

Est-ce que quelqu'un saurait comment faire ça?
Il obtiendra mon respect inconditionnel sur 7 générations.

> Lire le message (4 commentaires, moyenne: 3,8).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Extrait de man perlre

Posté par Pascal Terjan (Jabber id, page perso, ) le 25/05/2005 à 12:30. (lien). Évalué à 8.

       "(?!motif)"
                 Une assertion de longueur nulle pour tester l'absence de
                 quelque chose en avant. Par exemple, "/foo(?!bar)/" reconnaît
                 toutes les occurrences de "foo" qui ne sont pas suivies de
                 "bar".

  • [^]Re: Extrait de man perlre

    Posté par lom (page perso, ) le 25/05/2005 à 12:51. (lien). Évalué à 3.

    Tout simplement...

    "Gloire à toi, je me prosterne à tes pieds que je suis indigne de baiser, et les mots manquent à mon vocabulaire embryonnaire pour traduire l’admiration d’airain et la reconnaissance de degré très élevée que je porte à ta personne."

Re: regexp

Posté par Dablah (page perso, ) le 25/05/2005 à 13:07. (lien). Évalué à 3.

Salut,

Il y a en effet la possibilité d'utiliser l'assertion décrite dans le commente précédent : "(?!motif)"

Sinon tu devrais pouvoir aussi t'en sortir de cette manière :

J'ai testé avec la commande UNIX egrep :


$ echo "lockdev-1.0.0-1.2" | egrep 'lockdev(-[0-9])+'
lockdev-1.0.0-1.2

$ echo "lockdev-devel-1.0.0-1.2" | egrep 'lockdev(-[0-9])+'



Voilà dans le deuxième cas l'expression n'est pas reconnue.

++

  • [^]Re: regexp

    Posté par lom (page perso, ) le 25/05/2005 à 13:10. (lien). Évalué à 1.

    Salut,

    Effectivement, ta solution marche dans ce cas, mais elle est trop spécifique à l'exemple que j'ai proposé.

    La solution avec (?!motif) est la meilleure dans mon cas.

    En tout cas, merci.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.perl