본문 바로가기
Language/Java

정규표현식

by 태윤2 2020. 7. 6.

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