2012-07-06 6 views
1

다음 정규 표현식이 false를 반환하는 동안 궁금합니다. 나는 볼 수 없다 "|" 일치하지 않아야합니다. 어떤 아이디어? 그리고 패턴을 "|"과 일치 시키려면 어떻게해야합니까?수직 막대가있는 Java 정규식

Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*"); 
boolean valid = pattern.matcher("|").matches(); 

미리 감사드립니다.

+2

당신이 필요하십니까 | 그룹에서 OR을 의미합니까? 당신이 [^ ab]을 가지고 있다면 그것은 효과가 없을까요? [^ a | b]가 필요합니까? 그게 "아니, 아니, 아니, 또는 b"로 구문 분석되면 귀하의 상황을 설명합니다. – Thilo

+1

정규 표현식에서 수행 할 작업을 더 구체적으로 지정할 수 있습니까? 몇 가지 예가 더 좋을 것입니다. – Keppil

답변

2

[^ ] 표현식은 대괄호 안에없는 문자와 일치합니다. |은 대괄호 안에 있으므로 일치하지 않습니다. \]과 같은 일부 문자를 제외한 모든 문자는 글자 그대로 [^ ] 표현식 안에 포함됩니다.

이 이러한 문자 아무것도하지만 일치 :

나는이 같은 말을 의미 생각

*\{}[]=>< 

문자열에 넣어하기를, 당신은이 작업을 수행 할 것입니다 :

"([^*\\\\{}[\\]=><])*" 
1

정규식에서 문자 클래스의 개념을 잘못 이해했다고 생각합니다. [^...]^ 다음의 모든 문자를 메타 문자이 아닌 일반 문자로 처리합니다. 따라서 "OR"파이프 |이 필요하지 않습니다.

문자 클래스에 |이 있고 집합을 반전하기 위해 ^을 사용하고 있기 때문에 단일 파이프가 정규 표현식과 일치하지 않습니다.

0

이 인쇄 true :

System.out.println(Pattern 
      .compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*") 
      .matcher("|") 
      .matches()); 

있지만 작동하지 않는 다른 장소에서 (\\\\|의 교체로) 파이프 찾기\\||.

켄달 프레이는 ^이 정규식을 방해하는 방법을 설명