Java 프로그래밍에서 정규 표현식 사용하기

4952 단어 Java정규 표현식
프로그램 설계 과정에서 입력한 데이터 형식에 대한 검사가 자주 필요합니다. 이때 정규 표현식을 사용하고 정규 표현식과 일치하면 데이터 형식이 정확합니다. 그렇지 않으면 형식이 잘못됩니다.입력한 데이터가 어떤 형식을 충족하는지 확인하기 위해 String 클래스의 matches() 방법으로 판단할 수 있습니다. 문법 형식은 다음과 같습니다.

boolean matches(String regex)

regex: 지정한 정규 표현식입니다.
반환값: boolean 형식을 반환합니다.
이 방법은 현재 문자열이 매개 변수regex가 지정한 정규 표현식과 일치하는지 알려주는 데 사용됩니다. 반환 값은 boolean 형식입니다. 현재 문자열이 정규 표현식과 일치하면 이 방법은true를 되돌려줍니다. 그렇지 않으면false를 되돌려줍니다.
정규 표현식은 특수한 의미를 가진 문자로 구성된 문자열입니다. 특수한 의미를 가진 문자를 원 문자라고 합니다. 다음은 정규 표현식의 일부 원 문자를 열거합니다. 정규 표현식의 쓰기 방법에서 다음 원 문자 앞에'\'기호를 추가하여 번역해야 합니다. 예를 들어 원 문자'\d'는 정규 표현식의 쓰기 방법에서'\d'이지만'.번역 후에는 임의의 문자가 아니라 구체적인 문장을 나타낸다.
.:임의의 문자를 대표합니다.
\d: 0~9의 모든 숫자를 나타냅니다.
\D: 숫자가 아닌 문자를 나타냅니다.
\s: 공백 문자를 나타냅니다.
\S: 비어 있지 않은 문자를 나타냅니다.
\w: 식별자로 사용할 수 있는 문자를 나타내지만 "$"은 포함되지 않습니다.
\W: 식별자로 사용할 수 없는 문자를 나타냅니다.
\p{Lower}: 소문자 a~z를 나타냅니다.
\p{Upper}: 대문자 A~A를 나타냅니다.
\p{ASCII}: ASCII 문자입니다.
\p{Alpha}: 알파벳 문자입니다.
\p{Digit}: 10진수, 0~9.
\p{Alnum}: 숫자 또는 알파벳 문자입니다.
\p{Punct}: 문장부호입니다.
\p{Graph}: 보이는 문자입니다.
\p{Print}: 문자를 인쇄할 수 있습니다.
\p{Blank}: 공백 또는 탭입니다.
\p{Cntrl}: 문자를 제어합니다.
정규 표현식을 사용할 때 특정한 유형의 원 문자가 여러 번 출력되어야 한다면 하나씩 입력하는 것은 상당히 번거롭다. 이때 정규 표현식의 한정 문자를 사용하여 횟수를 반복할 수 있다. 다음은 상용 한정자와 그 의미를 열거한다.
?:0번 또는 1번.
*: 횟수 또는 여러 번.
+: 1회 또는 1회.
{n}: n번 반복합니다.
{n,}: 적어도 n번은 반복합니다.
{n, m}: n~m회 반복합니다.
정규 표현식에서 여러 문자를 대괄호로 묶을 수도 있습니다. 대괄호의 각종 정규 표현식은 서로 다른 의미를 대표합니다. 다음은 대괄호 중원 문자와 그 의미를 열거합니다.
[abc]: a, b 또는 c를 나타냅니다.
[^abc]: a, b, c 이외의 모든 문자를 표시합니다.
[a-zA-Z]: a~z 또는 A~Z의 모든 문자.
[a-d[m-p]:a~d 또는 m~p의 모든 문자.
[a-z & [def]:d, e 또는 f.
[a-z & [^bc]:a~z 사이에는 b와 c의 모든 문자가 포함되지 않습니다.
[a-z & [^m-p]]:a~z 사이에는 m~p의 모든 문자가 포함되지 않습니다.
사용 예:
1. 자동차 번호:

/**

* 

* @description: 

* @param carNum

*       A106EK

* @return  :true  :false

*/

public static boolean validateCarNum(String carNum) {

boolean result = false;

String[] provence = new String[] { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",

" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };

String reg = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}";

boolean firstChar = false;

if (carNum.length() > 0) {

firstChar = Arrays.asList(provence).contains(carNum.substring(0, 1));

}

try {

Pattern p = Pattern.compile(reg);

Matcher m = p.matcher(carNum);

if (m.matches() && firstChar) {

result = true;

} else {

result = false;

}

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

2. 핸드폰 번호:

/**

* 

* @description: 

* @param mobileNum 15516985859

* @return  :true  :false

*/

public static boolean isMobileNum(String mobileNum) {

boolean result = false;

try {

Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");

Matcher m = p.matcher(mobileNum);

result = m.matches();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

휴대폰 번호 + 고정 전화: 010-111111, 1111, 551, 6985, 90377-11111

//java ( 、 )

String legalPhone = "";
String regExp ="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}|[0]{1}[0-9]{2,3}-[0-9]{7,8}$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(importPotentialBFOs[i].getLegalPhone());
if(m.find()){ // :m.find , false
 legalPhone = importPotentialBFOs[i].getLegalPhone();
 uploadTmp.setLegalTelephone(legalPhone);

}else{
 throw new BizException(" !");
}

3. 실수:

String[] arrs=new String[]{"a","1.123","-1.23","0","+111"};

      String regex="-?\\d+\\.?\\d*";

      Pattern p = Pattern.compile(regex);

      for (int i = 0; i < arrs.length; i++) {

       Matcher m = p.matcher(arrs[i]);

       System.out.println(arrs[i]+":"+m.matches());

 }

인쇄:
a:false
1.123:true
-1.23:true
0:true
+111:false

좋은 웹페이지 즐겨찾기