2012-07-13 6 views
0

문자열이 "abc123("이고 에 숫자 또는 문자가 아닌 하나 이상의 문자가 포함되어 있는지 확인하고 싶습니다..Java 정규식이 작동하지 않습니다.

"abc123(".matches("[^a-zA-Z0-9]+");이 경우 true를 반환해야합니까? 그러나 그것은 복용량이 아닙니다! 뭐가 문제 야?

내 테스트 스크립트 :

public class NewClass { 
    public static void main(String[] args) { 
     if ("abc123(".matches("[^a-zA-Z0-9]+")) { 
      System.out.println("true"); 
     } 
    } 
} 
+0

첫 번째 사항 : 끝에서 +가 필요 없음 –

+0

여전히 작동하지 않습니다 ... – wowpatrick

+0

순전히 REGEX 문법의 한 부분에서 잘 보입니다 (그러나 Java는 알지 못합니다.) true를 반환합니다. 자바 스크립트에서. 틀림없이 거짓을 반환합니까? – Utkanos

답변

5

Java에서 표현식은 일부가 아닌 전체 문자열과 일치해야합니다.

myString.matches ("정규식")는 문자열이 정규 표현식에 의해 완전히 일치 할 수 있는지 여부를 true 또는 false가 따라 반환합니다. 문자열 전체가 일치 할 수있는 경우에만 String.matches()가 true를 반환한다는 것을 기억하는 것이 중요합니다. 즉, "regex"는 처럼 "^ regex $"에 문자열 앵커의 시작과 끝을 쓴 것처럼 적용됩니다. Source

당신의 표현은 모든 것이 아닌 문자열의 일부를 찾고 있습니다. 표현식을 .*YOUR_EXPRESSION.*으로 변경할 수 있으며 전체 문자열과 일치하도록 확장됩니다.

+0

그리고 어떻게 해결할 수 있습니까? 나머지 부분과 상관없이 그것이 포함되어 있다면 지금하고 싶습니다! – wowpatrick

+0

@wowpatrick : 기존 표현의 시작과 끝 부분에'. *'를 추가 할 수 있습니다. – unholysampler

+0

그게 네 작품! 답변에 추가 할 수 있습니까? 여기보다 더 :) # – wowpatrick

4

는 오히려 그것은 단지 문자와 숫자가 포함되어 있는지 확인하는 것보다, 왜 그 이외의 포함되어 있는지 확인하지? 이 true를 반환하면 단지 이외의 무언가가보다 당신은

"abc123(".matches("[\W]"); 

을하지 말 그룹 (\의 W)를 사용하고 문자열이 당신이 찾고있는 자보다 다른 것을 포함 아는 것보다 그게 사실 반환하는 경우 수 단어 문자 및 숫자.

2

표현식 [^A-Za-z0-9]+은 '문자 또는 숫자 아님'을 의미합니다. 아마도 '편지 또는 숫자 만'을 의미하는 ^[A-Za-z0-9]+$으로 바꾸기를 원할 것입니다.

+1

당신이 제안하는 그 정규 표현식은 오직 하나의 문자열과 만 일치 할 것입니다. + :'^ [A-Za-z0-9] + $' – m0skit0

+0

@ m0skit0 : 이것을 놓치지 마세요. – Roman

관련 문제