슬기로운 개발생활

[Java] 정규 표현식과 Pattern 클래스

by coco3o
반응형

정규 표현식(Regular Expression)

정규표현식은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리할 수 있도록 하는 수단이다.

 

예를들어, 전화번호, 주민등록번호, 이메일 등과 같이 정해져있는 형식이 있고 사용자가 그 형식대로 제대로 입력했는지 검증해야 할 때 정규표현식과 비교한다.


자주 사용하는 정규 표현식의 기호

기호 설명    
[ ] 한 개의 문자 [abc] a, b, c 중 하나의 문자
[^abc] a, b, c 이외의 하나의 문자
[a-zA-Z] a~z, A~Z 중 하나의 문자
\d 한 개의 숫자, [0-9]와 동일
\s 공백
\w 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일
? 없음 또는 한 개
* 없음 또는 한 개 이상
+ 한 개 이상
{n} 정확히 n개
{n,} 최소한 n개
{n,m} n개부터 m개까지
( ) 그룹핑

다음은 02-123-4567 또는 010-1234-5678과 같은 전화번호를 위한 정규 표현식이다.

(02|010)-\d{3,4}-\d{4}

(02|010) : 02 또는 010

- : - 포함

\d{3,4} : 3자리 또는 4자리 숫자

- : - 포함

\d{4} : 4자리 숫자

 

다음은 coco@naver.com과 같은 이메일을 위한 정규 표현식이다.

\w+@\w+\. \w+(\. \w+)?

\w+ : 한 개 이상의 알파벳 또는 숫자

@ : @

\w+ : 한 개 이상의 알파벳 또는 숫자

\. : .

\w + : 한 개 이상의 알파벳 또는 숫자

(\. \w+)? : \. \w+이 없거나 한 번 더 올 수 있음

 

주의할 점은 \.과 .은 다르다.

\.은 문자로서의 점(.)을 말하지만 .은 모든 문자 중 한 개의 문자를 뜻한다.


Pattern 클래스

정규 표현식으로 문자열을 검증하는 기능은 java.util.regex.Pattern 클래스의 정적메소드인 matches() 메소드가 제공한다.

boolean result = Pattern.matches("정규식", "검증할 문자열");

 

다음은 정규 표현식의 간단한 예제이다.

public class PatternExample {
    public static void main(String[] args) {
        String regExp = "(02|010)-\\d{3,4}-\\d{4}";
        String data = "010-123-4567";

        boolean result = Pattern.matches(regExp, data);
        if(result) {
            System.out.println("정규식과 일치합니다.");
        }else {
            System.out.println("정규식과 일치하지 않습니다.");
        }

        regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
        data = "coco@navercom";

        result = Pattern.matches(regExp, data);
        if(result) {
            System.out.println("정규식과 일치합니다.");
        }else {
            System.out.println("정규식과 일치하지 않습니다.");
        }
    }
}
정규식과 일치합니다.
정규식과 일치하지 않습니다.

Process finished with exit code 0

이메일 검증에서 일치하지 않는 이유는 navercom이라고 되어있기 때문이다. 반드시 점(.)과 한 개 이상의 알파벳 또는 숫자가 포함되어야 하므로 naver.com이라고 해야 맞다.

 


reference : 이것이 자바다 11장 기본 API 클래스

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기