내 정규식을 빌드하기 위해 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)
중 하나만 참조 할 수 있습니다 .ac
bc
답변
구현에 포함 된 경우 캡처되지 않는 괄호를 사용할 수 있습니다.
(?:a|b)
답변
루 블러도 괄호를 사용하지 않으며의 우선 순위 |
가 낮습니다. 예를 들어 a | bc는 ccc와 일치하지 않습니다.
답변
OR 대체가 모두 단일 문자 인 경우 “문자 집합”연산자를 사용할 수 있습니다.
([ab]c)
ac
또는 일치 bc
하고 더 읽기 쉽습니다.