Hoe wordt de AND/OR-operator weergegeven in reguliere expressies?

Ik programmeer momenteel een vocabulaire-algoritme dat controleert of een gebruiker het woord correct heeft ingetypt. Ik heb de volgende situatie:
De juiste oplossing voor het woord zou “part1, part2” zijn.
De gebruiker moet “part1” (antwoord 1), “part2” (antwoord 2) of “part1, part2” (antwoord 3) kunnen invoeren.
Ik probeer nu de door de gebruiker gegeven string te matchen met de volgende, automatisch aangemaakte, regex-expressie:

^(part1|part2)$

Dit geeft alleen antwoord 1 en 2 als correct, terwijl antwoord 3 fout zou zijn. Ik vraag me nu af of er een operator is die lijkt op | dat zegt and/orin plaats van either...or.

Kan iemand mij helpen dit probleem op te lossen?


Antwoord 1, autoriteit 100%

Ik ga ervan uit dat je de regex dynamisch wilt bouwen met andere woorden dan part1 en part2, en dat je wilt dat de volgorde er niet toe doet. Zo ja, dan kun je zoiets als dit gebruiken:

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

Positieve overeenkomsten:

part1
part2, part1
part1, part2, part3

Negatieve overeenkomsten:

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1

Antwoord 2, autoriteit 11%

'^(part1|part2|part1,part2)$'

werkt het?


Antwoord 3, autoriteit 2%

Werkt dit zonder afwisseling?

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

of waarom niet dit?

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

De eerste werkt voor alle voorwaarden, de tweede voor alle behalve part2(met GNU sed 4.1.5)


Antwoord 4

Geen expert in regex, maar je kunt ^((part1|part2)|(part1, part2))$wel doen. In woorden: “deel 1 of deel2 of beide”


Antwoord 5

Of je kunt dit gebruiken:

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

Antwoord 6

gebruik
indien in vim:

:s/{\|}/"/g

vervangt { en } op ”
dus {lol} wordt “lol”

Other episodes