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


115

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

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

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

(a|b)(c)

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

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


루 블러에 대한 링크에 대한 멋진 +1
bukowski

답변:


181

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

((?:a|b)c)

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


그게 해냈어! 초고속 응답에 감사드립니다. 시간 제한 (존재하지 않았던)이 만료 된 후에 수락하겠습니다.
goggin13

4
나는 아이디어가 a또는 b전혀 포착하지 않는다고 생각했습니다 . 즉,하는 일치 ac 하거나 bc, 만 캡처c :(?:a|b)(c)
앨런 무어

1
@AlanMoore or 문에서 하나만 캡처 할 수 있습니까? 그래서 패턴 ac또는을 찾고 ab있지만 'c'만 출력 ab되면 출력하고 싶습니다 ab.
Moondra

24

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

(?:a|b)

@mmutz 빠른 응답에 감사드립니다! 나는 내가 위해 단지 무엇을보고 하였다 모두 답변, 받아 들일 수 있으면 좋겠다
goggin13

3

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


'! ~'연산자는 무엇을합니까? 나는 적은 괄호와 표현처럼, 정규식 지저분한 이미 충분하다
goggin13는

! ~는 "일치하지 않음"에 대한 펄리스입니다. 제 부분에서 엉성한 글을 썼습니다. 고정, 감사합니다.
msw

2
이해가 안 돼요. 의 낮은 우선 순위는 |당신이 왜 않는 사용 괄호에 있습니다. (?:a|b)c일치 ac하거나 bc(원하는 동작), a|bc일치 하는 동안 a또는 bc.
Alan Moore

2

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

([ab]c)

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.