안드로이드 정규표현식, Pattern, Matcher 클래스 알아보기

안드로이드

안드로이드에서 아이디나 비밀번호 유효성 검사를 진행할 때, 정규표현식을 사용한다.

대게 아래와 같은 방식으로 진행이 된다.

Pattern과 Matcher 클래스
String 형식으로 된 정규표현식을 Pattern 클래스를 활용해 객체화한다.

Pattern 클래스는 Matcher 객체를 만들 수가 있고 정규표현식의 matching 결과가 Matcher 클래스에 담긴다.

그럼 Pattern 클래스와 Matcher 클래스에 대해 공부해보자.


Pattern 클래스

- 주요 메서드

compile(String regex) : 주어진 정규표현식을 pattern으로 만든다.

matcher(CharSequence input) : 만든 pattern과 match시킬 Matcher 객체를 만든다.

asPredicate() : 문자열과 match시킬 Predicate 객체를 만든다.

pattern() : 컴파일된 정규표현식을 반환한다.

split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리한다.


Matcher 클래스

matches() : pattern이 대상 문자열과 일치하면 true

find() : pattern이 대상문자열과 일치하면 true, 그리고 그 위치로 이동

find(int start) : matcher를 reset하고 start부터 일치하는 pattern 찾기 시작

start() : 이전 match의 시작 인덱스 반환

start(int group) : 이전 match의 결과에서 주어진 group 안의 첫 인덱스 반환

end() : 매치된 가장 마지막 글자의 offset 반환

end(int group) : 이전 match의 결과에서 주어진 group 안의 마지막 글자의 offset 반환

group() : 매칭된 string 반환

group(int group) : 매칭 결과에서 주어진 group의 string 반환

groupCount() : 매칭된 결과의 group 개수 반환


정규표현식

<문자>

x : 특정 문자

\\ : 백슬래시 문자

\t : 탭

\n : 개행

\r : 캐리지 리턴

\f : form-feed 문자

\a : alert(bell) 문자

\e : escape 문자(esc)


<문자 집합>

[abc] : a,b or c

[^abc] : a,b, or c 제외한 모든 문자

[a-zA-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는 제외 


<이미 정의된 문자 집합>

. : 아무 문자

\d : 숫자 (= [0-9])

\D : 숫자 아닌 문자 (=[^0-9])

\s : 공백

\S : 공백 아닌 문자 (=[^\s])

\w : 알파벳이나 숫자 (=[a-zA-Z_0-9])

\W : 알파벳이나 숫자 제외한 문자 (=[^\w])

\b : 단어의 경계

\B : 단어가 아닌 것들의 경계


<수량 한정자>

X? : X가 한 번 또는 아예 안나옴

X* : X가 0번 이상

X+ : X가 한 번 이상

X{n} : X가 정확히 n번

X{n,} : X가 적어도 n번 이상

X{n,m} : X가 적어도 n번 이상 m번 이하


<논리 연산자>

XY  : X 뒤에 Y

X|Y : X 또는 Y

(X) : X 그룹


<그룹으로 만들기>

정규표현식에서는 ()로 그룹을 만든다.

그룹의 순서는 열린괄호( 순이다.

ex) ((A)(B(C)))