[Java] Java Pattern 클래스(자바 정규 표현식) - 사용법
반응형

정규표현식이란?

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

Ex) 전화번호, 이메일, 주민 번호 등!

개발할 때 형식대로 제대로 입력했는지 검증할 경우에 정규표현식을 사용하여 쉽게 구현할 수 있다!

 

 

정규표현식 기호 별 의미

^ 문자열의 시작, [ ] 안에 쓰일 경우 not을 의미!
$ 문자열의 끝
. 임의의 한 문자
* 문자가 0번 이상 발생
+ 문자가 1번 이상 발생
? 문자가 0번 혹은 1번 발생
[ ] 문자의 집합 범위
[0-9] : 숫자 0부터 9
[a-z] : 알파벳 소문자 a 부터 z
{ } 횟수 또는 범위
( ) 소괄호 안의 문자를 하나의 문자로 인식
| OR
\ 확장 문자의 시작
\b 단어의 경계
\B 단어가 아닌 것의 경계
\A 입력의 시작부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백문자
\S 공백문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자만! [0-9]와 동일하다
\D 숫자를 제외한 모든 문자

Pattern 클래스

정규식을 사용하기 위한 객체

 

* 선언 코드

import java.util.regex.Pattern;

- java.util.regex.Pattern import하면 사용할 수 있다.

 

Pattern 클래스 주요 Method

String형으로 들어온 정규식을 Pattern객체로 바꿔주는 - complie()

  • static Pattern compile (String regex [,  int flags])
import java.util.regex.Pattern;

public class stringCheck {
    static public void main(String[] args) {
        String REGEX = "([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))";

        Pattern pattern = Pattern.compile(REGEX);// pattern 객체로 만들어주기
        System.out.println(pattern);
    }
}

 

String으로 선언해준 정규식을 Pattern 객체로 만들어 준것이다!

위 compile함수에 전달 되는 인자를 잘 보시면 flags라는 것도 있는데 어떤 것일까?

정규식을 매칭하는 방식에 비트 마스크를 적용하는 것이다.

궁금하다면 여기 클릭!!

 

[정규식] Methods of the Pattern Class

스크랩 : http://neokido.tistory.com 지금까지 우리는 test harness를 이용하여 패턴 객체를 생성하고 그들의 기본 폼을 이용하였다. 이번 섹션에서는 좀더 향상된 기술로 플래그와 함깨 패턴을 생성하거

egloos.zum.com

 

 

컴파일된 정규표현식을 String 형태로 변환하는 - pattern()

  • public String pattern()

이 함수는 예제가 잘 없다.. 그래서 여기 만들어본다.

import java.util.regex.Pattern;

public class stringCheck {
    static public void main(String[] args) {
        Pattern ptn = Pattern.compile("([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))"); //complie된 정규 표현식!!

        //위 표현식을 String으로 받아오고 싶다면?
        String ptn_str = ptn.pattern();

        System.out.println(ptn_str);// ([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))
    }
}

이렇게 사용하는 것이다.. 처음에 Pattern으로 선언한 표현식을 String으로 받아오고 싶다면 사용하면 된다!!

+ compile된 것에서 쓸 수 있는 함수들..

asPredicate(); 문자열을 일치시키는데 사용할 수 있는 Predicate 작성
split(CharSequence input); 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리

 

 

패턴을 매칭하여 결과를 boolean으로 반환해주는 - matches()

  • public static boolean matches (String regex, CharSequence input)
import java.util.regex.Pattern;

public class regex {
    static public void main(String[] args) {
        String REGEX = "([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))";
        String INPUT = "010-1234-5678"; // 형식에 맞게 작성한 전화번호
        String INPUT2 = "010-1-11"; // 형식이 틀린 전화번호

        System.out.println(Pattern.matches(REGEX, INPUT));  // true
        System.out.println(Pattern.matches(REGEX, INPUT2));  // false
    }
}

이것도 역시 간단하다! 첫 번째 인자로 정규식 표현을 넣어주고 두번째 인자로 검증할 값을 넣어주면 된다!

INPUT의 경우 형식이 맞으므로 true를 반환하였고 INPUT2의 경우 형식이 맞지 않으므로 false를 반환했다!

 

 

정규식 표현을 포함한 데이터를 검색하고 싶을 때 - quote()

  • public static String quote(@NotNull String s)
String data = "[123";
str.matches("[123");

만약 [123이라는 문자열에서 패턴이 [123인 것을 찾고 싶을 때 저렇게 적는다면 오류가 날 것이다.. 왜냐하면  [ ] <- 대괄호는 정규표현식을 표현하는 기호이기 때문이다. 이럴때 quote() 메소드를 사용한다.!

String data = "[123";
data.qoute("[123"); // "\Q[123\E"과 동일

이렇게 사용하면 오류가 발생하지 않고 사용할 수 있다.

반응형