Forum Programmation.perl Regexp

Posté par  (site web personnel) .
Étiquettes : aucune
0
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.
  • # Extrait de man perlre

    Posté par  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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.

Suivre le flux des commentaires

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