et / ou opérateur en expression régulière

Je suis en train de programmer un algorithme de vocabulaire qui vérifie si un utilisateur a correctement saisi le mot. J’ai la situation suivante: La solution correcte pour le mot serait “part1, part2”. L’utilisateur doit pouvoir entrer soit “part1” (réponse 1), “part2” (réponse 2) ou “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, alors que la réponse 3 est incorrecte. Je me demande maintenant s’il y a un opérateur similaire à | qui dit “et / ou” au lieu de “soit … ou”. Quelqu’un peut-il m’aider?

Je vais supposer que vous voulez construire une regex dynamicment pour contenir d’autres mots que part1 et part2, et que vous voulez que l’ordre ne compte pas. Si oui, vous pouvez utiliser quelque chose comme ceci:

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

Matchs positifs:

 part1 part2, part1 part1, part2, part3 

Correspondances négatives:

 part1, //with and without trailing spaces. part3, part2, otherpart1 
 '^(part1|part2|part1,part2)$' 

est-ce que ça marche?

Est-ce que cela fonctionne sans alternance?

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

ou pourquoi pas ça?

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

Le premier fonctionne pour toutes les conditions, le second pour tous sauf la partie part2 (en utilisant GNU sed 4.1.5)

Ou vous pouvez utiliser ceci:

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

Pas un expert en regex, mais vous pouvez faire ^((part1|part2)|(part1, part2))$ . En mots: “partie 1 ou partie 2 ou les deux”