¿Cómo se representa el operador Y/O en las expresiones regulares?

Resuelto Jonathan asked hace 13 años • 5 respuestas

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/oren lugar deeither...or .

¿Alguien puede ayudarme a resolver este problema?

Jonathan avatar Nov 05 '11 21:11 Jonathan
Aceptado

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
Gaute Løken avatar Nov 05 '2011 15:11 Gaute Løken
'^(part1|part2|part1,part2)$'

¿Funciona?

Kent avatar Nov 05 '2011 14:11 Kent

No soy un experto en expresiones regulares, pero puedes hacerlo ^((part1|part2)|(part1, part2))$. En palabras: "parte 1 o parte 2 o ambas"

BlackBear avatar Nov 05 '2011 14:11 BlackBear

¿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)

potong avatar Nov 06 '2011 01:11 potong