2014-10-09 2 views
0

위해 나는, 선택적으로 고정 문자열 -PREM (하이픈 PREM) 뒤에 숫자 나 알파벳이나 숫자가 될 수 있습니다 NBTAAA-PREM_001NBTAAA_001는 정규식 문자열 검증

NBTAAA 부분과 같은 패턴으로 오는 문자열을 검증하기위한 정규식이 필요 _에 밑줄을 긋고 그 뒤에 세 개의 영숫자가옵니다.

"NBTAAA_001"의 경우 '-PREM'(하이픈 PREM)이없는 정규 표현식이 필요합니다.

나는 코드를 작성했습니다 :

public static void main(String[] args) { 
    List<String> input = new ArrayList<String>(); 

    input.add("NBTAAA-PRIM_001"); 
    input.add("NBTAAA_001"); 

    for (String ssn : input) { 
     // String ssn = "NBTAAA-PRIM_001"; 
     if (ssn.indexOf("-") != -1) { 
      int PRIMbeginIndex = ssn.indexOf("-") + 1; 
      int PRIMEndIndex = PRIMbeginIndex + 4; 

      String d = ssn.substring(PRIMbeginIndex, PRIMEndIndex); 

      if (d.equalsIgnoreCase("PRIM")) { 

       if (ssn.matches("^([A-Za-z0-9]+(?=.*?\bPRIM\b)+_[A-Za-z0-9]{3})$")) { 
        System.out.println(" PRIM image value : " + ssn); 
       } 
      } 
     } 
     else { 
      if (ssn.matches("^([A-Za-z0-9]+_[A-Za-z0-9]{3})$")) { 
       System.out.println("NORMAL IMAGE value : " + ssn); 
      } 
     } 
    } 
} 

를하지만 제대로 작동하지 않습니다. 이 문제를 해결하도록 도와주세요.

+2

PRIM 또는 PREM입니까? – nhahtdh

+0

그것은 오직 PREM입니다. –

+0

'PREM' 부분이 대문자와 소문자를 구별하지 않게하고 싶습니까? – nhahtdh

답변

0
^[a-zA-Z0-9]+(?:-PREM)?_[a-zA-Z0-9]{3}$ 

시도해 볼 수 있습니다. 데모를 참조하십시오.

http://regex101.com/r/iM2wF9/16

+0

왜 downvoted ????????????????? – vks

+0

답변 해 주셔서 감사합니다. 괜찮습니다. –

+0

@ user2945308 환영합니다. – vks