1. 기본 패턴(메타) 문자
^x : x 로 시작하는 문자열
=> "x", "xa", "xab" ....
x$ : x로 끝나는 문자열
=> "x", "ax"
.x : x 앞에 1개의 문자가 포함되는 문자열
=> "ax", "bx" ....
x+ : x가 1번 이상 반복되는 문자열
=> "x", "xx", "xxx"...
x* : x가 0번 이상 반복되는 문자열
=> "a", "", "x", "xx", "xxx" ...
x? : x 나올 수도 있고, 나오지 않을 수도 있는 문자열
=> "x", "", "a" ...
x|y : x 또는 y 가 포함되는 문자열
ex)
xa?y$ : 시작 문자열은 관계없음
문자열 중에서 x뒤에 a가 올 수도 있고, 안 올 수도 있으며,
그 뒤의 마지막은 y로 끝나야한다.
=> xy ( O ), xay ( O ), bxay ( O ), hixy( O )
xayb(X, 마지막이 y로 끝나야함)
xaay ( X, a?가 한개 이므로 a는 없거나 1개만 존재해야함)
2. 괄호 메타문자
2-1) 소괄호() = 소괄호 안의 모든 문자열을 포함하는 문자열
(xy) : xy 가 그대로 포함된 문자열
2-2) 중괄호{} = 반복 관련 문자열
x{n} : x가 n 번 반복되는 문자열
=> x{2} : x가 2번 반복되는 문자열 = "xx" x{5} "xxxxx"
x{n, m} : x가 n번 이상 m번 이하 반복되는 문자열
=> x{2,4} : x가 2번에서 4번까지 반복되는 문자열 = "xx", "xxx", "xxxx"
x{n,} : x가 n번이상 반복되는 문자열
=> x{2,}
2-3) 대괄호[] = [] 기호 안의 문자들 중 하나가 나오는 문자열
[xy] : x 또는 y 1글자
[a-z] : 소문자( 소문자 a ~ 소문자 z 가 포함)
[가-힣] : 한글 1글자
[0-9] : 숫자 1자리
2-4) 대괄호[] 내의 ^ 기호 = 해당 문자열이 포함되지 않는 문자열 (제외)
[^0-9] : 숫자가 아닌 문자 1글자
[^A-Z] : 대문자가 아닌 1글자 또는 숫자
ex)
(a1){2}b{2,4}c{2,}
=> a1문자열 2번나오고, b가 2~4번나오고, c가 2번이상 나옴
a1a1bbcc( O ),
a1a1bbbbbccc ( X )
[a-z]{2}[0-9][가-힝][^A-Z]
3. 예외 문자 처리
=> \ 기호를 사용하여 예외문자를 지정함
(단, 자바에서 \ 기호는 확장 이스케이프 문자이므로 \\ 형태 사용 필수!)
\d : 숫자
\D: 숫자가 아닌것
\s : 공백
\S: 공백이 아닌 것
\w : 단어(소문자,숫자,특수문자,_)
\W : 단어가 아닌 것
유용한 정규표현식 예)
1. ^[가-힣]{2,5}$ = 한글 2 ~ 5글자 (주로 이름에 사용)
2. ^(010 | 011)[-\s]?\d{3,4|[-\s]?\d{4}$ = 전화번호 판별
010 또는 011로 시작하고, - 기호 또는 공백이 있을 수도 있고 없을 수도 있음
숫자가 3자리 ~ 4자리이며 뒤에 - 기호 또는 공백이 있을 수도 있고 없을 수도 있음
마지막 숫자 4자리로 끝나는 문자
정규표현식을 활용하는 클래스
1. java.util.regex.Pattern 클래스
- 정규표현식 패턴 문자열을 컴파일해서 객체로 관리
- 해당 객체를 활용하여 전체 문자열이 정규표현식에 전체에 부합되는지 매칭 판별
ex) 전화번호 형식 검증, 패스워드 길이 형식 검증 등
= 단, 패스워드 복잡도 검사(부분 규칙 검사) 불가능
- 공개된 생성자가 없으며, Pattern.compile() 메서드를 사용하여 객체 리턴받아 사용
1
2
3
4
5
6
7
8
|
전화번호 검증
String PhoneRegex = "^(010|011)[-\\s]?\\d{3,4|[-\\s]?\\d{4}$";
// 010 또는 011로 시작하며 - 또는 공백이 들어갈수도있고 숫자 3~4자리 - 또는 공백 숫자 4자리로 끝나는 문자열
String Phone = "01012145678";
boolean result = Pattern.matches(PhoneRegex,Phone);
01012145678 검증 결과 : true
|
cs |
2. java.util.regex.Matcher 클래스
- 패턴 해석 및 입력 문자열 일치 여부를 파악하는 클래스
- pattern 클래스와 달리 정규표현식 일치 여부만 판단하는 것이 아니라
정규표현식 내용을 포함하는지, 위치가 어디인지 등 자세한 정보까지 파악 가능
- Pattern.matcher() 메서드를 사용하여 Matcher 객체 리턴받아 사용
(공개된 생성자가 없으므로 객체 직접 생성 불가)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
String src = "Java and Javascript has no relation";
String regex = "Java";
1. Pattern 클래스의 compile() 메서드를 호출하여 Pattern 객체 생성
=> 파라미터 : 정규표현식 문자열
Pattern pattern = Pattern.compile(regex);
2.생성된 Patter 객체의 matcher() 메서드를 호출하여 matcher 객체 생성
=> 파라미터 : 검증할 원본 문자열
Matcher matcher = pattern.matcher(src);
3. 각종 메서드를 호출하여 검증 수행
matcher.matches() // false
matcher.lookingAt() // true
matcher.find() // true
|
cs |
'Language > Java' 카테고리의 다른 글
throws 키워드를 사용한 예외 처리의 위임 (0) | 2020.07.07 |
---|---|
예외(Exception) (0) | 2020.07.06 |
StringTokenizer~format (0) | 2020.07.06 |
시간 관련 클래스 및 패키지 (0) | 2020.06.25 |
제네릭(Generic) (0) | 2020.06.25 |