1. 정규 표현식 이란?
ㅇ 정규 (Regular)
- 원래, `규칙적인`,`정식인`,`좋은 성질을 갖는``,`다루기 쉬운` 등을 의미
- 여기서는, 단순하고 쉽고 강력하며 실용적인 이라는 뜻을 내포함
ㅇ 정규 표현식 (Regular Expression)
- 문자열의 패턴을 나타내기 위한 표현식
. 1 이상의 문자 또는 기호를 조합해 만들어진, 문자열 축약 표현식(패턴)
ㅇ 정규 언어 (Regular Language)
- 정규 표현식(일정 패턴을 갖는 문자열 집합)으로 형식화된 언어 ☞ 형식 언어 참조
2. 정규 표현식의 역사 및 구현 엔진
ㅇ 역사
- 1950년대 : 스티븐 클레이니(Stephen Kleene), `정규 집합` 수학적 모델 창시
- 1960,1970년대 : 케네스 톰슨(Kenneth Thompson), 정규표현식 적용 논문 발표 및 구현
- 1990년대 : 필립 헤이즐, 정규표현식 라이브러리 PCRE 개발
ㅇ 구현 엔진 구분
- DFA (Deterministic Finite Automaton, 결정적 유한 오토마타)
. 단순하고 빠른 매칭이 필요한 경우에 적합
. 例) GNU grep, Google RE2 등
- NFA (Non Deterministic Finite Automaton, 비 결정적 유한 오토마타)
. 복잡한 패턴 매칭과 고급 기능이 필요한 경우에 적합
. 例) PCRE (Perl Compatible Regular Expression), vim (Vi IMproved), 파이썬 모듈 re 등
.. vim : 유닉스/리눅스 환경 하의 텍스트편집기인 vi를 개선한 버전으로,
읽기 중심으로 편집,검색,명령 4개 작업 모드로써 동작함
3. 정규 표현식의 응용 및 단점
ㅇ 문자열 처리/조작 기술에 가장 많이 쓰여짐
- 문자열 패턴을 간단한 식으로 표현 가능
. 즉, 반복문,조건문 없이도, 문자열 패턴을 정의하고 테스트할 수 있음
- 문자열 조작/처리에 응용하는 강력한 도구로 쓰임
. 많은 프로그래밍 언어 및 도구에서 지원되며, 텍스트 처리 작업의 효율적 수행 가능
. 例) 특정 문자열의 검색, 일치, 추출, 삭제, 치환(대체) 등
ㅇ 다만, 복잡한 패턴 작성시 가독성이 떨어질 수 있으므로,
- 패턴을 설계,유지보수할 때는, 주석을 달거나,
- 복잡한 경우에는, 여러 개의 간단한 패턴으로 나누어 작성하는 것이 좋음
4. 정규 표현식의 기본 규칙
ㅇ (연산)
- 기본 연산 셋 : 연접, 반복, 선택 ☞ 아래 5.항 참조
ㅇ (기호)
- (순수 문자) 리터럴 : `문자,숫자` 등 그 자체
- (특수 문자) 패턴 기호 : 기본 연산에 추가적인 `메타 문자` ☞ 아래 6.항 참조
ㅇ (표시)
- 대부분의 정규 표현식은 슬래시(/)로 감싸짐
5. 정규 표현식의 기본 연산 셋
※ 정규표현식 내 조합해서 패턴을 만드는 기본 연산
ㅇ 연접 (Concatenation)
- 별도의 특별한 기호는 없고, 단지 붙여쓰기 만 하면 됨
ㅇ 반복 (Repetition)
- 반복을 나타내는 수량자 : *, +, ?, {}
ㅇ 선택 (Selection)
- | (OR, 선택 또는 UNION, 합)
. 例) the|The|THE => the 또는 The 또는 THE 라는 문자열 패턴을 나타냄
※ 연산 결합 우선순위 : 반복 > 연접 > 선택
- 한편, 우선순위의 명시적 재지정을, 그룹화 기호 `( )`에 의해 할 수 있음
6. 정규 표현식의 메타 문자 (특수 문자 기호)
ㅇ 위 기본 연산 셋(3)에 추가시켜,
- 쉽게 쓸 수 있도록 만들어진 패턴 기호 : 메타 문자
ㅇ 비록,
- 정규 표현식이, 기본 연산 셋(3) 만으로도 표현 가능하지만,
- 정규 표현식의 메타문자는, 특별한 의미를 갖는 문자들로써,
. 프로그래머 관점으로, 정규표현식을 보다 쉽게 표현할 수 있는 방법임
※ ☞ 정규표현 메타 문자 참조
- 선택 : `|` (OR, 선택)
- 문자 클래스 : `[ ]` (특정한 한 문자를 나타냄)
- 서브 패턴/그룹화 : `( )` ☞ 메타문자 그룹화 참조 (부분 문자열로 감싸서 다양하게 활용)
- 수량자 (Quantifier) : `*, +, ?, { }` ☞ 메타문자 수량자 참조 (직전 문자들의 반복 횟수)
- 위치 고정 앵커 : `^, $`, 특정 용도 앵커 `\`, 임의 한 문자 `.` ☞ 메타문자 앵커 참조
- 수정자 (Modifier) : `g, i, m, s`, 이스케이프 `\` 등
7. 정규 표현식의 기초 활용
※ ☞ 정규표현식 활용 기초 참조
- 문자열 부위의 위치 구분, 문자열 일치의 종류, 캡처와 치환 등
8. 정규 표현식의 例
ㅇ 정규 표현식의 활용 例 ☞ 정규표현식 예 참조
ㅇ 정규 표현식의 테스트용 웹사이트
- 자바스크립트 지원 : regexr.com 등
- PCRE/자바스크립트/파이썬 지원 : regex101.com, debuggex.com