현재 사용자가 단어를 올바르게 입력했는지 확인하는 어휘 알고리즘을 프로그래밍 중입니다. 다음과 같은 상황이 있습니다. 단어에 대한 올바른 해결책은 “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)$