IT이야기

다른 항목이 선행되지 않는 경우 일치하는 항목을 찾기 위한 정규식

cyworld 2022. 5. 6. 19:48
반응형

다른 항목이 선행되지 않는 경우 일치하는 항목을 찾기 위한 정규식

자바에서 regex를 가지고 패턴이 특정 문자가 선행되지 않는 경우에만 일치하는 regex를 쓰고 싶다.예를 들면 다음과 같다.

String s = "foobar barbar beachbar crowbar bar ";

나는 바 앞에 foo가 없다면 매치하고 싶다.따라서 다음과 같은 결과를 얻을 수 있다.

barbar
beachbar
crowbar
bar

사용하려는 경우negative lookbehind다음과 같은 경우:

\w*(?<!foo)bar

어디에(?<!x)"이 지점 이전에 "x"가 없는 경우에만"을 의미한다.

자세한 내용은 정규식 - 둘러보기를 참조하십시오.

편집: 추가\w*이전 문자(예: "beach")를 캡처한다.

또 다른 옵션은 먼저 선택 단어 문자와 일치하는 다음 단어를 찾는 것이다.bar, 그리고 그것이 일치했을 때 왼쪽에 바로 있는 것은 아니다.foobar.

뒤쪽의 주장은 일치된 후에 실행될 것이다.bar첫째로

\w*bar(?<!foobar)
  • \w*0+단어 일치
  • bar문자 그대로 일치
  • (?<!foobar)부정적인 뒷모습, 현재 위치에서 주장foobar왼쪽으로 직접 가지 않는다

Regex 데모

어떤 경우에는 앞의 부분을 선택적으로 포함시킨 다음 두 번째 단계로 해당 경기를 건너뛰는 것이 더 쉬울 수 있다.예를 들어, "+"로 시작하지 않는 숫자를 찾으려면:

if (preg_match_all('/(\+?[0-9][0-9\s\-].*[0-9])/s',$text,$matches)) {
    foreach($matches[1] as $match) {
        if(substr($match,0,1) == '+'){
            continue;
        }
        // continue processing
    }
}

여전히 2+자릿수와 일치하기 때문에 뒤쪽의 부정적인 표정은 먹히지 않았지만, 첫 번째 자릿수는 경기에 포함시키지 않았다.예를 들어 +1234는 234로 반환된다.

참조URL: https://stackoverflow.com/questions/9306202/regex-for-matching-something-if-it-is-not-preceded-by-something-else

반응형