
현재 문자열에 'bar'가 포함되어 있지만 앞에 'foo'가 없는 경우와 일치하는 정규식이 있습니다.
(?<!foo)bar
문자열에 'bar'가 포함되어 있지만 앞에 'foo' 및 (선택적으로) 추가 문자가 없는 위치와 일치하도록 정규식을 수정하고 싶습니다.
예. bar 앞에는 'foo', 그 뒤에는 'test'가 있으므로 'footestbar'는 일치해서는 안 됩니다.
정규식은 부정적인 뒤돌아보기 내에서 수량어 사용을 허용하지 않기 때문에 이를 달성할 수 있는 방법을 찾을 수 없습니다. 이후에는 다음을 수행할 수 없습니다.
(?<!foo.*)bar
대체 접근 방식이 있습니까?
업데이트:
정규식 맛은 다음과 같습니다.re2. 현재 문서를 검토하고 있지만 얼핏 보면 다음과 같은 내용을 발견했습니다.
(?<!re) after text not matching re (NOT SUPPORTED)
따라서 솔루션은 부정적인 뒤돌아보기를 사용할 수 없습니다(문서를 올바르게 해석한 경우).
답변1
수정된 게시물
따라서 일부(대부분?) Regex 엔진은 고정 길이의 뒤돌아보기로만 작동하는 것처럼 보입니다. 그러나 가변 길이 미리보기를 허용하는 것은 괜찮은 것 같습니다. 이에 대한 귀하의 사용 사례가 무엇인지 또는 얼마나 실행 가능한지 잘 모르겠지만 한 가지 아이디어는 문자열을 뒤집어 다음을 사용하는 것입니다.
rab(?!.*oof)
물론 우스꽝스러워 보이고, 여러분이 그것을 어떻게 사용하는지, 얼마나 유용할지 모르겠습니다. Regex에 대한 내 경험의 대부분은 .NET을 사용했으며 대부분은 뒤돌아볼 필요가 없었습니다. 당신을 위한 아이디어입니다..!
원본 게시물 - 특정 Regex 엔진에서만 작동합니다(.NET을 사용하여 테스트됨).
다음 정규식을 시도해 보세요.
(?<!foo(?:.*)?)bar
이렇게 하면 동일한 네거티브 룩 뒤에 캡처되지 않는 선택적 그룹이 추가됩니다.