y / u operador en expresión regular

Estoy currentry progtwigndo un algoritmo de vocabulario que verifica si un usuario ha escrito correctamente la palabra. Tengo la siguiente situación: la solución correcta para la palabra sería “parte1, parte2”. El usuario debe poder ingresar “parte1” (respuesta 1), “parte2” (respuesta 2) o “parte1, parte2” (respuesta 3). Ahora trato de hacer coincidir la cadena dada por el usuario con la siguiente expresión de expresiones regulares creada automáticamente:

^(part1|part2)$ 

Esto solo devuelve las respuestas 1 y 2 como correctas, mientras que la respuesta 3 sería incorrecta. Ahora me pregunto si hay un operador similar a | que dice “y / o” en lugar de “cualquiera … o”. ¿Me puede ayudar alguien?

Voy a suponer que quieres construir una expresión regular de forma dinámica para contener otras palabras además de las partes 1 y 2, y que quieres que el orden no importe. Si es así puedes usar algo como esto:

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

Partidas positivas:

 part1 part2, part1 part1, part2, part3 

Partidas negativas:

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

¿Funciona?

Funciona esto sin alternancia?

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

o por qué no esto?

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

El primero funciona para todas las condiciones, el segundo para todos, pero part2 (usando GNU sed 4.1.5)

O puedes usar esto:

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

No es un experto en expresiones regulares, pero puede hacer ^((part1|part2)|(part1, part2))$ . En palabras: “parte 1 o parte 2 o ambas”