[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