본문 바로가기

Programming language/Java

Java - 16 [정규표현식, Pattern, Matcher 클래스]

정규표현식 (Regular Expression) 

- 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 이다.

- 전화번호, 주민등록번호, 이메일 등과 같이 특정 형식을 맞춰야 하고 사용자가 그러한 형식을 잘 맞추었는가

검증해야하는 경우가 있다. 이럴 때 정규표현식을 사용하여 걸러 낸다.

 정규표현식 문법 

정규 표현식 설명
^ 문자열 시작
$ 문자열 종료
. 임의의 한 문자(단 \은 넣을 수 없음)
* 앞 문자가 없을 수도 무한정 많을 수도 있음
+ 앞 문자가 하나 이상
? 앞 문자가 없거나 하나 있음
[ ]  문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다.
{ }  횟수 또는 범위를 나타냅니다.
( ) 소괄호 안의 문자를 하나의 문자로 인식
| 패턴 안에서 or 연산을 수행할 때 사용
\ 정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)
\b 단어의 경계
\B 단어가 아닌것에 대한 경계
\A 입력의 시작 부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
(?i) 앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다.

 

정규 표현식 설명
^[0-9]*$ 숫자
^[a-zA-Z]*$ 영문자
^[가-힣]*$ 한글
\\w+@\\w+\\.\\w+(\\.\\w+)? E-Mail
^\d{2,3}-\d{3,4}-\d{4}$ 전화번호
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ 휴대전화번호
\d{6} \- [1-4]\d{6} 주민등록번호
^\d{3}-\d{2}$ 우편번호

 

 

자바로 정규표현식을 검열할 때에는 

- java.util.regex.Pattern 클래스를 사용해서 Pattern.matcher()함수를 사용한다.

 

Pattern Pattern.compile(String 문자열)

- 문자열을 받아서 Pattern 객체를 반환한다.

 

Matcher Pattern.matcher(검열할 문자열)

- 정규표현식 패턴에 검열할 문자열을 넣은 Matcher 객체를 반환한다.

 

boolean Matcher.matches();

- Mathcer객체에 있는 패턴과 검열할 문자열의 검열성공 여부를 반환한다. 검열을 통과하면 true, 아니면 false;

 

위 세개의 과정을 전부합치면

 

먼저 패턴 문자열을 넣은 Pattern 객체를 선언하고 Pattern 객체에 검열할 문자열을 넣고 Matcher 객체를 반환한다.

Matcher 객체에 있는 패턴과 검열할 문자열의 성공여부를 matcher함수를 이용해서 boolean값을 반환한다.

 

이과정을 한번에 할수 있는게

 

boolean Pattern.matches(패턴 문자열, 검열할 문자열)

- 패턴 문자열과 검열할 문자열을 넣어 검열 여부를 반환한다.

class RegexExample {
    public static void main(String[] args)  {

        String pattern = "^[0-9]*$"; //숫자만
        String val = "123456789"; //대상문자열
        boolean p = Pattern.matches(pattern, val);
        // 위식은 아래식과 정확히 같다.//
        Pattern pattern1 = Pattern.compile(pattern);
        Matcher k = pattern1.matcher(val);
        boolean a = k.matches();
        // 위식은 아래식과 정확히 같다.//
        boolean s = Pattern.compile(pattern).matcher(val).matches();
        
        boolean regex = Pattern.matches(pattern, val);
        System.out.println(regex);
    }
}