e / o operatore nell’espressione regolare

Sto attualmente programmando un algoritmo di vocabolario che controlla se un utente ha digitato correttamente la parola. Ho la seguente situazione: la soluzione corretta per la parola sarebbe “part1, part2”. L’utente dovrebbe essere in grado di inserire “part1” (risposta 1), “parte2” (risposta 2) o “parte1, parte2” (risposta 3). Ora provo ad abbinare la stringa fornita dall’utente con la seguente espressione regex creata automaticamente:

^(part1|part2)$ 

Ciò restituisce solo le risposte 1 e 2 corrette mentre la risposta 3 sarebbe errata. Ora mi chiedo se c’è un operatore simile a | che dice “e / o” invece di “o … o”. Qualcuno può aiutarmi qui?

Presumo che tu voglia build una regex in modo dinamico per contenere altre parole rispetto a part1 e part2 e che desideri che l’ordine non contenga. Se è così puoi usare qualcosa come questo:

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

Partite positive:

 part1 part2, part1 part1, part2, part3 

Partite negative:

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

funziona?

Funziona senza alternanza?

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

o perché no?

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

Il primo funziona per tutte le condizioni il secondo per tutti tranne per la parte 2 (usando GNU sed 4.1.5)

O puoi usare questo:

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

Non è un esperto di espressioni regolari, ma puoi fare ^((part1|part2)|(part1, part2))$ . In parole: “parte 1 o parte 2 o entrambi”