2009-09-22 4 views
1

정규식 문제가 있습니다.정규 표현식에서 일치하는 문자 제외

일치해야하는 문자열이 있습니다. 문자열은 항상 2 자로 시작하고 그 다음에 6 자리 숫자가옵니다.

  • AB123456
  • EF123456

    • 는 그러나, 나는 무시해야하는 문자 중 하나 개 조합이있다. 예컨대 그래서 문자열의 일반 형식과 일치하는 정규 표현식을 작성하려면 :

      • XX123456

      . 순간

      , 내가 할 필요 해요 : 내가 위에서 내 코드에서 startsWith 절을 제거 할 수 있도록

      Pattern pattern = Pattern.compile("[A-Z]{2}[0-9]{6}"); 
      ... 
      
      if(pattern.matcher(n).matches() && !n.toUpperCase().startsWith("XX")) { 
          // do match stuff 
      } 
      

      어떻게 내 정규 표현식을 다시 쓸 수 있습니까?

    답변

    4

    사용하십시오 negative look-ahead :

    "(?!XX)[A-Z]{2}[0-9]{6}" 
    

    (?!XX) "나는 현재 위치에서 XX를 일치시킬 수있는 경우가 일치하지 않습니다"의미하지만, 실제로 (이 시험 때문에 두 개의 문자를 현재의 위치를 ​​변경하지 않습니다 여전히 [A-Z]{2}과 일치 할 수 있습니다.

    +0

    감사합니다. 나는 당신의 연결을 따르고 더 많은 것을 읽을 것이다. –

    관련 문제