정규표현식 요약
정규표현식의 개념은 1950년대 미국의 수학자 스티븐 콜 클리니(Stephen Cole Kleene)가 형식 언어 이론의 일환으로 도입했다.
이후 유닉스 시스템 등에서 텍스트 검색 및 처리에 활용되면서 켄 톰슨(Ken Thompson) 등 여러 컴퓨터 과학자들에 의해 실제 구현 및 발전이 이루어졌다.
아래는 정규표현식의 기본 문법과 고급 문법을 구분하여 표로 정리한 내용이다.
기본 문법
구분 | 문법 | 설명 |
리터럴 | a, 1, @ | 해당 문자를 그대로 매칭 |
메타문자 | . | 임의의 한 문자 |
메타문자 | ^ | 문자열의 시작 |
메타문자 | $ | 문자열의 끝 |
메타문자 | \ | 이스케이프 |
문자 집합 | [abc], [a-z], [^abc] | 대괄호 안의 문자 집합, 범위 지정 및 부정 문자 집합 |
미리 정의된 클래스 | \d | 숫자 |
미리 정의된 클래스 | \w | 단어 문자 ([a-zA-Z_]) |
미리 정의된 클래스 | \s | 공백 문자 ([ \t\n\f\r]) |
반복 (Quantifiers) | *, +, ? | - 각각 0회 이상, 1회 이상, 0 또는 1회 반복 - 소괄호로 그룹핑하지 않으면 반복 기호는 항상 바로 앞에 있는 한 요소에만 적용됨 |
반복 (Quantifiers) | {n}, {n,}, {n,m} | 각각 정확히 n회, n회 이상, n ~ m 회 사이 |
그룹핑 및 캡처 | () | 패턴을 그룹화하여 캡처 |
선택 (Alternation) | | | OR 연산자 (예: a|b) |
고급 문법
구분 | 문법 | 설명 |
비캡처 그룹 | (?:...) | 캡처하지 않고 그룹화 |
전방 탐색 | (?=...) | 긍정 전방 탐색 |
전방 탐색 | (?!...) | 부정 전방 탐색 |
후방 탐색 | (?<=...), (?<!...) | (?<=...): 긍정 후방 탐색, (?<!...): 부정 후방 탐색 |
이름 있는 캡처 그룹 | (?P...) 또는 (?...) | 그룹에 이름을 부여 (정규표현식 엔진에 따라 문법 차이 있음) |