본문 바로가기

프로그래밍 기초/기초문법

정규 표현식 (RegEx - regular expression)

0. 정규 표현식 (RegEx - regular expression)

- 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식언어이다.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

- 간단하게 예를 들면 회원가입시 ID(영문 + 숫자, 5~20자리) 형식에 맞춰 기입됬는지 체크할때 사용됨


1. 정규 표현식 문법

    1). 메타문자 ( \ ^ $ . | [ ] ( ) * + ? { } )

         - 정규 표현식에서 사용되는 기호

         - 특별한 의미(특정 기능)를 가짐

앵커
(anchor)

- 문자열의 위치
- 특정 용도       
^ (특정 위치 고정) 행의 처음
$ (특정 위치 고정) 행의 끝
\ (특정 용도) 특정 문자와 결합하여 새로운 기능을 가짐

 

 

    1-1). \  (특정 위치 혹은 특정 용도)

         - \ 와 특정 문자가 결합되어 특정한 기능을 가진다

         - 대문자와 소문자의 기능이 다르니 주의

         - 해당 정규식과 일치, 혹은 일치하지 않는 경우를 지정하여 사용

\A 문자열의 처음
줄 구분이 없을 경우 ^ 와 같은 기능
\Z 문자열의 끝
줄 구분이 없을 경우 $ 와 같은 기능
\b (word boundary) 특정 위치의 문자
\B 특정 위치를 제외한 나머지 문자
\d (digit) 숫자 ( = 문자열에 숫자 O)
[0-9] 와 같은 기능
\D (non digit) 숫자가 존재하지 않음 ( = 문자열에 숫자 X)
\t (tab) 탭(tab)을의미
\s (space) 공백문자를 의미
\S (non space) 공백문자가 없음을 의미
\w (word) 알파벳, 숫자, _ 중의 한 문자를 의미
\W (non word) 알파벳, 숫자, _ 중의 한 문자가 아님을 의미

 

 

    2). 수량자 ( *,  +,  ?,  { } )

         - 1개 이상의 문자들의 반복 범위를 지정할때 사용됨

{n} n번 반복시 일치
{n,} n번 이상 반복시 일치
{n,m} n번 에서 m번 안으로 반복시 일치
* (= {0}) 0번 이상 반복시 일치

- 쉽게 설명하면 'ABC' 문자열을 A ~ C 까지 1번 체크(반복 X)
+ (= {1,}) 1번 이상 반복시 일치

- 쉽게 설명하면 'ABC' 문자열을 A ~ C 까지 2번 체크(반복 1회)
? (= {0,1}) 패턴이 일치하지 않거나 1번만 반복시 일치

 

 

    3). 패턴 변경자 ( g,  i,  m,  s )

         - 검사 위치 및 범위를 수정해줌

g (global) 전역 검색
 i (ignore case) 대소문자 구분 안함
m (multi line) 문자열에 줄 바꿈이 있을 경우, 여러 줄을 인식
(줄바꿈 없을 경우 한 문장으로 인식)
일치 대상이 다른 줄에 위치해도 검색 가능
s (single line, dotall) 임의의 한 문자 검색
x r공백 문자 무시
주의) 이 변경자를 지원하지 않는 엔진이 많다.

 


2. 정규 표현식 예제

    1). ^[0-9]*$: 숫자

         - ^ ~ $ : 검사하려는 문자열의 처음부터 끝까지 검사

         - [ ] : 검사 하려는 패턴

         - * : 검사 하려는 범위 안을 최소 1번 이상, 0번 반복


    2). ^[a-zA-Z]*$: 영문자 (소, 대)

    3). ^[가-힣]*$: 현대 한글(유니코드를 지원하는 정규식 엔진에 한정)

    4). ^[ㄱ-ㅎㅏ-ㅣ가-힣]*$: 한글 자모 낱자를 포함한 모든 현대 한글

    5). ^\d{3}-\d{3,4}-\d{4}$: 휴대전화 연락처

         - \d{3}: {3} 개의 문자가 숫자임을 의미, {3 또는 4} 개의 문자가 숫자임을 의미