특정 서브스트링 뒤에 없는 서브스트링과 일치시키는 정규식
매치할 정규식이 필요해요.blahfooblah
하지만 아니다blahfoobarblah
술집 뒤에 바만 없으면 foo와 foo 주변의 모든 것들과 매치하고 싶습니다.
이것을 사용해 보았습니다.foo.*(?<!bar)
꽤 가깝지만, 일치합니다.blahfoobarblah
. 뒤에 있는 부정적인 시선은 바(bar)가 아니라 어떤 것과도 일치해야 합니다.
제가 사용하고 있는 언어는 Clojure입니다.Clojure는 Java regexes를 후드 아래에 사용합니다.
EDIT: 좀 더 구체적으로 말하면, 합격하기 위해서도 필요합니다.blahfooblahfoobarblah
하지만 아니다blahfoobarblahblah
.
시험:
/(?!.*bar)(?=.*foo)^(\w+)$/
테스트:
blahfooblah # pass
blahfooblahbarfail # fail
somethingfoo # pass
shouldbarfooshouldfail # fail
barfoofail # fail
정규 표현 설명
NODE EXPLANATION
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
bar 'bar'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
foo 'foo'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
기타 정규식
제외하는 경우bar
직후에foo
, 를 사용할 수 있습니다.
/(?!.*foobar)(?=.*foo)^(\w+)$/
편집
질문을 구체화하기 위해 업데이트했습니다.
/(?=.*foo(?!bar))^(\w+)$/
새로운 테스트
fooshouldbarpass # pass
butnotfoobarfail # fail
fooshouldpassevenwithfoobar # pass
nofuuhere # fail
새로운 설명
(?=.*foo(?!bar))
확실히foo
발견되었지만 직접 팔로우되지는 않습니다.bar
일치시키려면foo
시작도 하지 않는 것을 따라가는 것bar
,해라
foo(?!bar)
부정적인 뒷모습을 가진 버전은 사실상 "match a"입니다.foo
끝나지 않는 것이 뒤따른다bar
". 그.*
모든 것과 일치하다barblah
, 및(?<!bar)
돌아보다lah
일치하지 않는지 확인합니다.bar
그렇지 않으니 모든 패턴이 일치합니다
대신 부정적인 전망을 사용하세요.
\s*(?!\w*(bar)\w*)\w*(foo)\w*\s*
효과가 있었어요 도움이 됐으면 좋겠네요행운을 빕니다.
문자열 자체보다 문자열 내의 모든 단어를 일치시키는 작업을 수행하도록 제안하는 댓글을 작성했습니다.
댓글로 다 치우는 게 아니라 새로운 답변으로 올리는 거예요.
새 정규식
/(?=\w*foo(?!bar))(\w+)/
샘플 텍스트
푸위트바 fooebor fooebor notfoo butfooisokerebar notfoohere and nofu needsfoo
일치.
푸위트바 푸우브와 푸우바 푸우브이소케어바 니즈푸우
특정 일치 요청은 다음과 같이 일치시킬 수 있습니다.
\w+foo(?!bar)\w+
이것은 일치할 것이다.blahfooblahfoobarblah
하지만 아니다blahfoobarblahblah
.
의 정규식에 관한 문제foo.*(?<!bar)
는.*
끝나고foo
. 다음 문자를 포함한 모든 문자와 일치합니다.bar
.
언급URL : https://stackoverflow.com/questions/2631010/a-regex-to-match-a-substring-that-isnt-followed-by-a-certain-other-substring
'source' 카테고리의 다른 글
JSON 경로에 특정 요소가 포함되어 있지 않은지 또는 요소가 존재하는지 여부를 테스트하려면 어떻게 해야 합니까? (0) | 2022.09.04 |
---|---|
Galera_new_cluster 명령이 클러스터를 시작하지 않음 (0) | 2022.09.04 |
스프링 데이터 jpa hibernate mariadb timestamp fractional seconds가 삽입될 때 잘리는 이유는 무엇입니까? (0) | 2022.09.04 |
WAIT와 BLOCKED 스레드 상태의 차이 (0) | 2022.09.04 |
.X에서 Java 클래스 생성SD 파일...? (0) | 2022.09.03 |