[java] 정규식 아님 연산자

Regexes에 NOT 연산자가 있습니까? 그 문자열에서와 같이 :"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"

\([0-9a-zA-z _\.\-:]*\)연도가 아닌 모든 항목을 삭제하고 싶습니다 : (2001).

따라서 정규식이 반환해야하는 것은 다음과 같아야합니다 (2001) name..

참고 : 같은 \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)것이 나를 위해 작동하지 않습니다 ( (20019)어떻게 든 일치합니다 …).



답변

아니요, 직접 아님 연산자는 없습니다. 적어도 당신이 바라는 방식은 아닙니다.

그러나 너비가 0 인 부정 미리보기를 사용할 수 있습니다.

\((?!2001)[0-9a-zA-z _\.\-:]*\)

(?!...)텍스트가있는 경우 일부 수단 “은 일치 다음 이 : (내다 따라서) 하지 않는다 (따라서 : 음성).이 일치를하지만 실제로는하지 않습니다 소비 가 일치하는 문자 (따라서 : 제로 폭).

실제로 2 개의 축 이있는 4 개의 둘러보기 조합이 있습니다.

  • lookbehind는 내다 / : 지정 문자 경우 이전 또는 이후에 포인트가 고려된다
  • positive / negative : 문자 일치해야하는지 또는 일치 하지 않아야 하는지 지정합니다 .

답변

일반적으로 양식 중 하나에 대해 몇 가지 해결 방법을 사용할 수 있지만 정답은 아닙니다.

  • [^abc], a또는 b또는 또는 c,
  • 또는 부정적 미리보기 : a(?!b), a뒤에 나오지 않음b
  • 또는 음 lookbehind : (?<!a)b이다 b덧붙일하지a

답변