[regex] 포함 된 내용을 캡처하지 않고 정규식에서 OR를 사용할 수 있습니까?

내 정규식을 빌드하기 위해 rubular.com 을 사용 하고 있으며 해당 문서는 다음을 설명합니다.

(...)   Capture everything enclosed
(a|b)   a or b

OR 표현식을 캡처하지 않고 어떻게 사용할 수 있습니까? 예를 들어 “ac”또는 “bc”를 캡처하고 싶습니다. 정규식을 사용할 수 없습니다.

(a|b)(c)

권리? 그 이후로 한 그룹에서 “a”또는 “b”를 캡처하고 다른 그룹에서 “c”를 캡처합니다. 캡처 된 결과를 필터링 할 수 있다는 것을 알고 있지만 작업이 더 많은 것 같습니다.

나는 명백한 것을 놓치고 있습니까? 적절한 경우 Java에서 사용하고 있습니다.



답변

정규식 구현에 따라 다음 구문과 함께 소위 비 캡처 그룹 을 사용할 수 있습니다 (?:…).

((?:a|b)c)

여기 (?:a|b)에 그룹이 있지만 일치 항목을 참조 할 수 없습니다. 따라서 일치하는 항목은 또는 ((?:a|b)c)중 하나만 참조 할 수 있습니다 .acbc


답변

구현에 포함 된 경우 캡처되지 않는 괄호를 사용할 수 있습니다.

(?:a|b)


답변

루 블러도 괄호를 사용하지 않으며의 우선 순위 |가 낮습니다. 예를 들어 a | bc는 ccc와 일치하지 않습니다.


답변

OR 대체가 모두 단일 문자 인 경우 “문자 집합”연산자를 사용할 수 있습니다.

([ab]c)

ac또는 일치 bc하고 더 읽기 쉽습니다.


답변