286 votes

Comment l'opérateur AND/OR est-il représenté dans les expressions régulières ?

Je suis en train de programmer un algorithme de vocabulaire qui vérifie si un utilisateur a tapé le mot correctement. Je me trouve dans la situation suivante : La solution correcte pour le mot serait "partie1, partie2". L'utilisateur devrait pouvoir saisir soit "part1" (réponse 1), soit "part2" (réponse 2), soit "part1, part2" (réponse 3). J'essaie maintenant de faire correspondre la chaîne donnée par l'utilisateur avec l'expression regex suivante, créée automatiquement :

^(part1|part2)$

Cela ne renvoie que les réponses 1 et 2 comme correctes alors que la réponse 3 serait fausse. Je me demande maintenant s'il existe un opérateur similaire à | qui dit and/or au lieu de either...or .

Quelqu'un peut-il m'aider à résoudre ce problème ?

346voto

Mithon Points 2410

Je vais supposer que vous voulez construire une regex dynamiquement pour contenir d'autres mots que part1 et part2, et que vous voulez que l'ordre n'ait pas d'importance. Si c'est le cas, vous pouvez utiliser quelque chose comme ceci :

((^|, )(part1|part2|part3))+$

Des correspondances positives :

part1
part2, part1
part1, part2, part3

Correspondances négatives :

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1

40voto

Kent Points 71470
'^(part1|part2|part1,part2)$'

Est-ce que ça marche ?

6voto

BlackBear Points 10069

Je ne suis pas un expert en regex, mais vous pouvez faire ^((part1|part2)|(part1, part2))$ . En clair : "partie 1 ou partie 2 ou les deux"

5voto

potong Points 18653

Cela fonctionne-t-il sans alternance ?

^((part)1(, \22)?)?(part2)?$

ou pourquoi pas ceci ?

^((part)1(, (\22))?)?(\4)?$

La première fonctionne pour toutes les conditions, la seconde pour toutes sauf part2 (en utilisant GNU sed 4.1.5)

2voto

FailedDev Points 15104

Ou vous pouvez utiliser ceci :

^(?:part[12]|(part)1,\12)$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X