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 Pascal Terjan (site web personnel) . Évalué à 8.
[^] # Re: Extrait de man perlre
Posté par lom (site web personnel) . Évalué à 3.
"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 (site web personnel) . Évalué à 3.
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 :
Voilà dans le deuxième cas l'expression n'est pas reconnue.
++
[^] # Re: regexp
Posté par lom (site web personnel) . Évalué à 1.
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.