앞에 다른 것이 없으면 일치하는 정규 표현식


164

따라서 java의 정규 표현식을 사용하면 패턴 앞에 특정 문자가없는 경우에만 일치하는 정규 표현식을 작성하려고합니다. 예를 들면 다음과 같습니다.

String s = "foobar barbar beachbar crowbar bar ";

bar 앞에 foo가 없으면 일치하고 싶습니다. 따라서 출력은 다음과 같습니다.

barbar
beachbar
crowbar
bar

나는 이것이 매우 간단한 질문이라는 것을 알고 있습니다. 정규식을 배우려고하지만 그 동안 지금 일할 것이 필요합니다.

답변:


277

다음 negative lookbehind과 같이 사용하고 싶습니다 :

\w*(?<!foo)bar

여기서 (?<!x)"이 시점 이전에"x "가없는 경우에만"을 의미합니다.

정규식 참조 -둘러보기 를 참조하십시오.

편집 : \w*이전에 문자를 캡처하기 위해를 추가했습니다 (예 : "해변").


2
foo_arbitrary_bar와 일치하지 않기 위해 어떤 수정이 필요합니까? 즉, 바로 앞 바가 아닌 foo
Brad Kent

1
@BradKent (?<!foo).*bar는 그런 식으로 일치 할 것이라고 생각합니다.
emyller

@emyller nope. 그것은 foobazbar와 일치합니다 (foo는 foobazbar 앞에 오지 않으므로 일치합니다)
Brad Kent

2
@BradKent "not match"에서 "not"을 읽지 않았습니다. 당신은 \b(?!foo)\w*bar\b그때 처럼 보입니다 .
emyller

4
@BradKent 그런 다음 새로운 질문을하거나 세부적으로 달성하려는 내용을 자세히 설명하거나 직접 찾을 때까지 정규 표현식으로 계속 연주 할 수 있습니다. :)
emyller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.