안드로이드 정규표현식, 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)))