정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
String 객체의 match메소드로 확인한다. 이때 \를 쓸 때는 앞에 \를 한번 더 입력해줘야한다.
- boolean flag = str.matches(regex);
- regex == String
정규 표현식의 종류
- | : 또는
- () : 연산자 범위 및 우선권
- 바로 앞 글자에 대한 양에 대한 기호
- + :1개 이상의 발생
- * : 0개 이상의 발생
- ? :0번 또는 1번 발생
- {n} : 정확히 n번만큼 일치
- {min, } : min 번 이상만큼 일치
- {min, max} : min 이상 max 이하만큼 일치
- .: 아무 글자 한글자
- (a|b|c)d ==[abc]d
- - : 범위 지정 ex) [a-z] 또는 [0-9] 또는 [A-Z]
- ^ : 문자열의 처음이나 끝
- $ : 끝
- () : 하위패턴
- [] : 문자 클래스
- [^] : 부정. 그것 제외
- [^A-Za-z0-9] : 특수문자만.
package com.kosta.exam01;
import java.util.Scanner;
public class CheckJumin_re{
public static void main(String[] args) {
int []n = {2,3,4,5,6,7,0,8,9,2,3,4,5};
int r = 0;
int chk = 0;
String jumin;
Scanner sc = new Scanner(System.in);
System.out.print("주민번호를 입력하시오 ==> ");
jumin = sc.next();
//공식에 의한 계산된 결과값이 마지막 체크값과 따지기 전에 형식이 맞는지 판별
//하이픈(-)을 기준으로 앞에는 6자리 숫자가 오고, 뒤에는 7자리 숫자가 와야한다.
String regex ="[0-9]{6}-\\d{7}";
boolean flag = true;
if(!jumin.matches(regex)) {
System.out.println("올바른 주민번호 형식이 아닙니다.");
return;
}
chk = Integer.parseInt(jumin.charAt(jumin.length() - 1)+"");
for(int i = 0; i < jumin.length() - 1; i ++) {
if(i == 6)
continue;
r = r + n[i] * Integer.parseInt(jumin.charAt(i)+"");
}
r %= 11;
r = 11 - r;
r %= 10;
if(r == chk)
System.out.println("올바른 주민번호");
else
System.out.println("잘못 입력");
}
}