정규 표현식(Regular expression)
문자열의 패턴을 이어 쓰기(연결), 고르기(|), 되풀이(*) 세 가지 연산으로 적는 표기. 정규 표현식으로 적을 수 있는 언어는 유한 오토마톤(finite automaton)이 알아보는 언어와 정확히 같다.
정규 표현식은 문자열의 모양을 적는 짧은 식입니다. 글자 a는 문자열 a 하나만 뜻하고, 여기에 세 가지 연산을 씁니다. 연결 rs는 r에 맞는 문자열 뒤에 s에 맞는 문자열을 잇고, 선택 r|s는 둘 중 하나에 맞으면 되며, 반복 r*(미국 논리학자 스티븐 클리니의 이름을 따 클리니 스타라 부릅니다)는 r에 맞는 조각을 0번 이상 잇습니다. 식 하나가 뜻하는 것은 문자열들의 집합(set), 곧 언어이고, 선택은 합집합(union)입니다. 예를 들어 (a|b)*abb는 'a와 b로 된 아무 문자열 뒤에 abb'이니, abb로 끝나는 문자열 전체입니다.
패턴:
그림 아래의 판정은 두 번 계산합니다. 한 번은 위의 오토마톤(automaton)을 직접 따라가고, 한 번은 브라우저에 들어 있는 정규 표현식 엔진(JavaScript RegExp)에 패턴을 그대로 넘깁니다. 두 판정은
식을 기계로 바꾸면 처음에는 한 글자에 여러 갈래로 갈 수 있는 비결정적 오토마톤(nondeterministic automaton)이 나옵니다. 이것을 결정적으로 바꾸는 부분집합 구성(subset construction)에서는 '지금 있을 수 있는 상태들의 집합'을 새 상태로 삼으니, 상태 n개짜리 기계가 최대
정규 표현식이 못 하는 일도 분명합니다. 기억이 유한하니 aⁿbⁿ이나 짝 맞는 괄호처럼 개수를 끝없이 맞춰야 하는 언어는 적을 수 없고(비둘기집 원리, pigeonhole principle), 이런 언어에는 문맥 자유 문법(context-free grammar)이 필요합니다. 촘스키 위계(Chomsky hierarchy)의 가장 안쪽 층입니다. 다만 프로그래밍 언어의 '정규식'은 되참조(backreference) 같은 기능을 더해서 이론상의 정규 언어(regular language)를 넘어섭니다. \1은 '첫째 괄호가 맞춘 것과 똑같은 문자열'이라는 뜻이라, (a*)b\1은 b 앞뒤의 a 개수가 같은 문자열 aⁿbaⁿ을 알아봅니다. 그 대가로 속도(velocity)를 보장할 수 없습니다. 되참조가 있는 패턴을 맞추는 일은 NP 완전(NP-complete) 문제여서, 다항 시간(polynomial time) 방법이 있다면 P = NP가 됩니다.
이어지는 곳. 뒤에 유닉스 운영체제를 함께 만든 미국 프로그래머 켄 톰프슨이 1960년대 말 문서 편집기에 정규 표현식 검색을 넣었고, 그것이 파일에서 패턴에 맞는 줄을 찾아 주는 유닉스 명령 grep으로 이어졌습니다. 오늘날에는 검색, 입력 검증, 컴파일러(compiler)의 낱말 분석에 두루 쓰입니다. 오탈자를 허락하는 검색은 패턴에 딱 맞는 문자열 대신 패턴과의 편집 거리(edit distance)가 작은 문자열을 찾는 문제입니다. 정규 표현식과 짝을 이루는 오토마톤의 화살표에 확률(probability)을 붙이면 마르코프 연쇄(Markov chain)가 되고, 상태를 숨기면 은닉 마르코프 모델(hidden Markov model)이 됩니다.
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- 비둘기집 원리
… 개수만큼 이어지는 aⁿbⁿ 같은 언어, 곧 개수를 끝없이 세야 하는 언어는 유한 오토마톤과 같은 힘을 가진정규 표현식으로 적을 수 없습니다. 같은 셈이 언어 모델에도 걸립니다. 상태의 크기가 고정된 상태 공간 모형은 …
- 람다 계산
… 아닙니다. 처치가 처음 람다 계산을 담으려던 논리 체계는 1935년 처치의 두 제자 스티븐 클리니(뒤에정규 표현식을 만든 미국 논리학자)와 로서가 러셀의 역설과 비슷한 방법으로 모순을 찾아내 버려졌고, 계산 부분만 …
- 유한 오토마톤
… 미국 논리학자 스티븐 클리니는 유한 오토마톤이 인식하는 언어가 정확히 이어 쓰기·고르기·되풀이로 적는정규 표현식으로 나타낼 수 있는 언어임을 보였습니다(보고서 1951, 출판 1956). 'ab로 끝나는 문자열'은 …
- 촘스키 위계
… 층을 가르는 것은 기억입니다. 가장 안쪽의 정규 언어는 상태만 기억하는 유한 오토마톤이 알아보고,정규 표현식으로 적을 수 있습니다. 여기에 스택(접시 더미처럼 맨 위에만 넣고 꺼낼 수 있는 기억 장치) 하나를 …
- 문맥 자유 문법
… 문맥 자유 문법은 '열린 것은 반드시 닫힌다'는 중첩을 얼마든지 깊이 적을 수 있고, 바로 이 점에서정규 표현식과 유한 오토마톤을 넘어섭니다. 유한한 상태로는 몇 겹 열렸는지를 셀 수 없기 때문입니다(⟦비둘기집 …
- 모노이드
… 모노이드에서 시작하는 짝은 수반 함자의 가장 기본적인 예이고, 문자열 모노이드는 유한 오토마톤과정규 표현식의 대수적 뼈대입니다. 곱을 합으로 바꾸는 준동형 로그와 넓이의 배율을 곱으로 모으는 행렬식은 …
- 반환
… ⊗가 교환하지 않습니다('ab'와 'ba'는 다릅니다). 이 반환의 원소 가운데 정규 언어를 적는 표기가정규 표현식입니다. 아닌 것도 있습니다. ⊕ = +, ⊗ = max로 두면 a = 1, b = c = 0에서 …