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