[JAVA] 정규표현식(Reaular Expression = Regex)
@욕심쟁이
·2020. 10. 13. 12:39
정규표현식(Reaular Expression)
- 패턴을 기반으로 특정 조건에 맞는 문자를 검색, 치환 등 수행
ex)패스워드 복잡도(안전도)검사, 전화번호 양식 검사 등
→ Validation(유효성)체크
- 언어 등 도구와 관계 없이 동일한 패턴을 사용
ex) 자바, 자바스크립트, SQL, 네트워크프로그래밍 등
정규표현식에 사용되는 클래스
- java.util.regex.Pattern, java.util.regex.Matcher
- Pattern클래스는 정규표현식을 컴파일해서 관리
입력문자열에 대한 전체 일치 여부 검사 등을 수행
→ matches() : 문자열이 정규표현식에 부합되는지 검사
- Matcher클래스는 패턴을 해석하고, 입력문자열에대한 일치 여부 검사
입력문자열에 대한 부분 또는 전체일치 여부 등 검사
[기본패턴]
^x | x로 시작하는 문자열 | x, xa, xb등(단, ax 는 사용불가) |
x$ | x로 끝나는 문자열 | x, ax,bx, yyx 등(단, xa, sb등은 사용불가) |
.x | x앞에 어떤 문자 한개가 존재 | ax, bx 등 |
x+ | x가 1번이상 반복될 수 있음 | x, xx, xxx 등 |
x? | x가 나오거나 안나올수 있음 | a, x, xx, xxx 등 |
x* | x가 0번이상 반복 될수 있음 | a, x, xx, xxx 등 |
x|y | x 또는 y가 올수있음 | x, y |
예)
- xa?y$ : 시작은 무관하고 x뒤의 a는 와도되고 안와되며 마지막은 y로 끝남.
→ xy (o), hixy (o), hixay (o), xaay (x)
- x|a?y$ : 시작 무관, x 또는 a?y$ 가 적용된 문자열
→ xy (o), xay (o), hixay (o), ay (x)
[괄호의 활용]
소괄호() | 괄호 안의 내용을 하나의 문자열로 그룹화 |
|
(xy) | xy가 하나의 조건으로 묶음 | |
중괄호{} |
중괄호 앞의 문자열에 대한 반복 횟수 지정 | |
x{n} | x가 n번 반복됨 | |
x{n,} | x가 n번 이상 반복됨 | |
x{n,m} | x가 n번 이상, m번 이하 반복됨 | |
대괄호[] |
대괄호 안의 문자열 중 하나를 포함 |
|
[xyz] | x 또는 y 또는 z | |
[AZ] | 대문자 A 또는 대문자 Z | |
[A-Z] | 대문자 1개 (A부터 Z까지 문자 중 1개) | |
[가-힣] | 한글 1글자 | |
[!@#$%] | 특수문자 !@#$%중 1개 | |
[^x] | 대괄호 내에서의 ^기호는 부정의 의미로 사용 따라서, x가 아닌 문자를 뜻함 ex) [^0-9] : 숫자가 아닌 문자 1개 |
예)
- (02|051|010) : 02또는 051 또는 010
- ^(abc)(def)+(ghi)$ : abc로 시작하고 def가 한번이상 반복되며 ghi로 끝나는 문자
→ abcdefghu(o), abcdefdefghi(o), abcdeghi(x)
- (a1){2}b{2,4}c{2,} : a1이 2번 반복되고, b가 2~4 번 반복, c가 2번이상 반복
→ a1a1bbcc(o), a1a1bbbbccccc(o), a1a1bbbbbcc(x), a1a1bbc(x)
예2)
- ^[A-Za-z]{2,4}$ : 영문자(대문자, 소문자) 2자리 ~ 4자리만 포함되어야 함(즉, 영문자로 시작하고 영문자로 끝남)
- ^[A-Za-z0-9가-힣]{4}$ : 영문자 또는 숫자 또는 한글 4자리
- [a-z]{2}[0-9][가-힣][^A-Z] : 소문자 중 2개 숫자1개, 한글1개, 대문자가 아닌것 1개
→ aa1홍a(o), aa1홍2(o), aa1홍A(x)
[예외문자처리]
\ | 기호를 사용하여 특정 문자를 예외 문자로 처리 (특수한 용도로 사용하기 위한 기호로 처리) 예를 들어, ?기호나 . 기호 등을 문자로 사용해야할 때 \? \. 형태로 사용 (주의! 자바에서 문자열로 지정해야할 경우 \는 이스케이프 문장이므로 \\? \\. 형태로 사용해야함 |
|
\d | 숫자(0~9)1개 = [0-9] 와 동일 | |
\D | 숫자가 아닌 것 1개 = [^0-9]와 동일 | |
\s | 공백문자 1개 | |
\S | 공백이 아닌 문자 1개 | |
\w | 알파벳(대소문자), 숫자, _기호 1개 | |
\W |
알파벳(대소문자), 숫자, _기호 제외한 문자 1개 |
예)
- 휴대폰 검증
→ 앞자리 숫자 3자리로 시작(010, 011)
→ 가운데 자리는 숫자 3자리 또는 4자리
→ 뒷자리는 숫자 4자리로 끝
→ 단, 각자리 사이에는 하이픈(-) 기호 또는 공백이 올 수도 있고 안 올수도 있음
^(010|011)[\s-]?[0-9]{3,4}[\s-]?[0-9]{4}$
or
^(010|011)(\s | -)?\d{3,4}(\s | -)?\d{4}$
or
^(010|011)[\s-]?\d{3,4}[\s-]?\d{4}$
- 패스워드 검증
→ 대문자, 소문자, 숫자, 언더스코어(_)포함 8~16글자
[A-Za-z0-9_]{8,16}$
- IP 주소(x.x.x.x ~ xxx.xxx.xxx.xxx)
→ 1) 4개의 옥텟별 10진수 1자리 ~ 3자리씩 마침표(.)를 기준으로 구분
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$
[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$
[플래그]
=> /x/플래그 형식으로 사용 ex) /l/g
g | 문자열 내의 모든 패턴 검색 |
i | 문자열의 대소문자 구별하지 않고 검색 |
m | 문자열이 행이 바뀌더라도 검색 |
예)
----문자열----
"Hello
Java
Lily"
----------------
/l/ : Hello의 세번째 문자 l 이 조건에 만족함
/l/g : Hello의 소문자 l 2개와 Lily의 소문자 1개가 조건에 만족
/l/gi : Hello의 소문자 l 2개와 Lily의 대문자 L, 소문자 l 이 조건에 만족
'IT > JAVA' 카테고리의 다른 글
JDK 여러버전 사용 방법 (0) | 2024.02.29 |
---|---|
[JAVA] 중간점검 TEST (0) | 2020.09.28 |
[JAVA] Static 키워드 (0) | 2020.09.14 |
[JAVA] 프로그램 실행 과정 (0) | 2020.09.14 |
[JAVA] 디자인 패턴(Design patterns)::싱글톤(Singleton):: (0) | 2020.09.14 |