정규표현식

Mykim5902 (토론 | 기여)님의 2015년 9월 23일 (수) 19:16 판 (HotCat을 사용해서 분류:프로그래밍 언어을(를) 추가함)

Regular Expression(RegEx)

개요

정규표현식(Regular Expression)이란 특정 형태(pattern; 패턴)의 데이터를 일괄적으로 찾거나 변경, 치환하기 위해 사용하는 형식언어이다. 정규식이라고도 하며, 영어로는 RegEx 혹은 RegExp로 줄여서 말하기도 한다. 개별 데이터를 사람이 찾거나 변경하는 것은 상당한 시간을 소모하지만, 컴퓨터에 특정 규칙을 지정하여 일괄적으로 찾거나 변경하는 것은 상대적으로 적은 시간을 소모한다. 일반적으로는 텍스트 문자열(문자와 숫자)을 다루는데 특화되어 있으나, 바이너리 데이터를 변경하는 데에도 많이 사용한다. 초창기에는 1970년대 UNIX에서 grep 필터나 텍스트 에디터에서 주로 사용되었는데, UNIX의 개발언어가 C(프로그래밍 언어)였고 C가 범용적으로 사용되어 후대 프로그래밍 언어에 영향을 준 까닭에, 대부분의 프로그래밍 언어가 정규표현식을 지원한다. 현재 POSIX 표준의 정규표현식 문법과 이를 확장한 Perl의 정규표현식 문법이 주류를 이루고, 각 프로그래밍 언어와 데이터베이스, 텍스트 에디터마다 다소 차이가 있는 정규표현식 문법을 지원한다.

컴퓨터 분야에서 정규표현식이 쓰이지 않는 경우는 극히 드물다. 예를 들어 웹 브라우저는 텍스트 형태로 표현된 HTML 문서를 시각화하기 위하여 태그를 패턴으로 읽어 처리한다. 리브레위키의 미디어위키 엔진은 위키문법에 맞춰 작성한 문서를 HTML 형식에 맞게 변형하여 웹브라우저에 전달한다. 리브레위키의 띄어쓰기, 맞춤법 들은 문서를 읽어 띄어쓰기가 안된 부분이나 흔한 맞춤법 실수를 올바르게 변경하도록 작동하고 있다. 특히 빅데이터 시대에 와서는 특정 형태의 데이터를 추출하고 사용가능하게 변형하는 것이 중요하게 되어, 정규표현식을 통계분야에서도 많이 활용하게 되었다.

구성요소

정규표현식의 구성요소는 일반 문자열과 형태를 지정하는 특수문자, 그리고 이를 구조화하는 집합, 수량자, 조건문으로 이루어져 있다.

문자열

정규표현식에서는 특수문자, 집합, 수량자, 조건문 등을 제외한 나머지를 문자열로 인식한다. 즉 특수문자를 제외한 영어와 한글, 한자 등의 모든 문자와 숫자이다. 단, 영어 등 서구권 언어의 경우에는 대문자와 소문자를 구별한다. 그러나 텍스트 에디터에 따라서는 대소문자 구별 기능을 끌 수도 있다.

원래 정규표현식은 한글, 한자 등의 인코딩이 없던 1970년대에 만들어졌기 때문에 특정 프로그래밍 언어나 텍스트 에디터에서는 인식이 안되거나, 입력한 글자와 실제 문서의 인코딩이 달라 정규표현식이 오작동하는 경우가 있었다. 특히 EUC-KR 인코딩과 유니코드간의 호환이 안되면 정규표현식이 작동하지 않았다. 한자의 경우에는 이 문제 외에도 유니코드에서의 한중일 통합한자 문제가 있다.

특수문자

집합

집합이란 문자열, 특수문자, 조건문 등 등장할 수 있는 형태를 표시한 것이다. 집합은 대괄호로 표시하며, 중간에 - 를 통하여 이어지는 것을 의미하게 할 수 있다.

  • [0-9]는 0부터 9까지의 숫자 집합을 의미하며, [1358]은 숫자 1, 3, 5, 8만의 숫자집합을 의미한다.
  • [A-Z]는 영어 대문자 집합을 의미하며, [AEIOUaeiou]는 영어에서 a, e, i, o, u로 이루어진 대소문자 집합을 의미한다.
  • [가-힣]은 가부터 힣까지의, 한글자모부분을 제외한 한글 집합을 의미한다.

집합으로 표시한 부분은 치환시에는 \1, \2 순으로 표시한다.

POSIX 문법에서는 [: :]의 형태로 된 것이 있는데,

수량자

수량자란 집합의 글자수가 얼마나 되는지를 지정하는 것이다. 수량자는 중괄호로 표시하며, 중간에 , 를 통하여 최소수량과 최대수량을 지정할 수 있다.

  • [0-9]{5} 는 5자리의 숫자 집합을 의미한다.
  • [A-Za-z]{3,} 는 3글자 이상의 영어 단어 집합을 의미한다.
  • [A-Za-z0-9]{4,8} 는 4글자 이상 8글자 이하의 영어 대소문자와 숫자로 이루어진 집합을 의미한다.

수량자를 지정하지 않은 집합은 그 수량을 1로 이해하게 된다.

조건문

조건문은 특정한 조건에서 검색되는 형태를 조정하기 위하여 사용한다. 조건문은 소괄호로 표시하며, 중간에 | 를 통하여 조건이 참인 경우와 거짓인 경우를 나누어서 지정할 수 있다.

기타

사용예시

관련항목

각주