¿Cómo se representa el operador Y/O en las expresiones regulares?
Actualmente estoy programando un algoritmo de vocabulario que verifica si un usuario ha escrito la palabra correctamente. Tengo la siguiente situación: La solución correcta para la palabra sería "parte1, parte2". El usuario debería poder ingresar "parte1" (respuesta 1), "parte2" (respuesta 2) o "parte1, parte2" (respuesta 3). Ahora intento hacer coincidir la cadena proporcionada por el usuario con la siguiente expresión regular 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 existe un operador similar a | que dice and/or
en lugar deeither...or
.
¿Alguien puede ayudarme a resolver este problema?
Voy a suponer que desea crear una expresión regular dinámicamente para que contenga otras palabras además de parte1 y parte2, y que desea que el orden no importe. Si es así, puedes usar algo como esto:
((^|, )(part1|part2|part3))+$
Coincidencias positivas:
part1
part2, part1
part1, part2, part3
Coincidencias negativas:
part1, //with and without trailing spaces.
part3, part2,
otherpart1
'^(part1|part2|part1,part2)$'
¿Funciona?
No soy un experto en expresiones regulares, pero puedes hacerlo ^((part1|part2)|(part1, part2))$
. En palabras: "parte 1 o parte 2 o ambas"
¿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 todas menos part2
(usando GNU sed 4.1.5)