2012-03-15 3 views
1

내 자바 @windows입니다 : 문자열이 8 개 문자보다 작은 경우자바 부정적인 lookbehind 정규 표현식 버그?

java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing) 

코드

Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("xxx").matches() //returns TRUE while it should return FALSE 
Pattern.compile(".+(?<!(xxx|idea|perforator|pycharm|s).*)").matcher("perforator").matches() //returns FALSE 

부정적인 lookbehind처럼 보이는이 실패합니다.

버그입니까, 아니면 정규식에 대해 잘못 이해합니까?

+0

당신이 뭘하고 싶어? lookbehind가 성공할 때까지 첫 번째'. +'가 되돌아 오므로 두 줄이 일치해야합니다. – Qtax

+1

@Qtax Java matcher의 영원히 문제가되는'matches()'메소드는 표현식이 전체 입력 문자열을 일치로 캡처하는 경우에만 성공합니다. – Affe

답변

0

당신이 사용할 수있는 (더 큰 표현의 일부로서) 일부 단어를 포함하지 않는 문자열과 일치해야하는 경우 : 그 유일한 경우

(?s:(?!xxx|idea|perforator|pycharm|s).)* 

을 당신은하고있는 중, 일치의 결과를 그냥 반전 :

xxx|idea|perforator|pycharm|s