[regex] AND / OR 연산자는 정규식에서 어떻게 표현됩니까?

현재 사용자가 단어를 올바르게 입력했는지 확인하는 어휘 알고리즘을 프로그래밍 중입니다. 다음과 같은 상황이 있습니다. 단어에 대한 올바른 해결책은 “part1, part2″입니다. 사용자는 “part1″(답변 1), “part2″(답변 2) 또는 “part1, part2″(답변 3)를 입력 할 수 있어야합니다. 이제 사용자가 제공 한 문자열을 다음과 같이 자동으로 생성 된 정규식과 일치 시키려고합니다.

^(part1|part2)$

이것은 답변 1과 2만을 정확한 것으로 반환하지만 답변 3은 틀릴 것입니다. 나는 지금 비슷한 연산자가 있는지 궁금합니다. | 그 and/or대신에 말합니다 either...or.

누구 든지이 문제를 해결하도록 도울 수 있습니까?



답변

part1과 part2가 아닌 다른 단어를 포함하도록 동적으로 정규식을 작성하고 순서는 중요하지 않다고 가정합니다. 그렇다면 다음과 같이 사용할 수 있습니다.

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

긍정적 인 일치 :

part1
part2, part1
part1, part2, part3

제외 어 일치 :

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


답변

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

작동합니까?


답변

이 변경없이 작동합니까?

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

아니면 왜 그렇지 않습니까?

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

첫 번째는 모든 조건에서 작동하며 두 번째는 모두 제외하고 part2(GNU sed 4.1.5 사용)


답변

정규식 전문가는 아니지만 할 수 있습니다 ^((part1|part2)|(part1, part2))$. “파트 1 또는 파트 2 또는 둘 다”


답변

또는 이것을 사용할 수 있습니다 :

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


답변