특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다.
정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다.
정규 표현식의 각 문자(즉, 패턴을 기술하는 문자열 안의 각 문자)는 메타 문자로 이해되거나 정규 문자('문자 그대로', 즉 '리터럴'의 의미로)로 이해된다.
정규식 a.
a는 단지 'a'와 일치하는 리터럴 문자
.
는 새 줄을 제외한 모든 문자와 일치시키는 메타 문자이다.
이 정규식은 이를테면 a
, ax
, a0
과 일치시킬 수 있다.
패턴 일치는 정확히 동일한 일치에서부터 매우 포괄적인 유사 일치에 이르기까지 다양하다.
.
는 매우 포괄적인 패턴
[a-z]
('a'부터 'z'까지의 모든 문자 일치)는 덜 포괄적
a
는 정확한 패턴(단지 'a'만 일치)이다.
메타문자 문법은 다양한 입력 데이터의 텍스트 처리의 자동화를 지시하는 정확하고 유연한 방법을 통해 표준 ASCII 자판을 사용하여 입력하기 쉬운 형태로, 미리 기술된 대상을 표현하기 위해 설계되었다.
패턴(pattern)으로 부르는 정규 표현식은 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 식이다.
문자열의 유한 집합을 지정하는 단순한 방법은 문자열의 요소나 멤버를 나열하는 것이다.
그러나 문자열의 원하는 집합을 지정하기 위해 사용할 수 있는 더 간결한 방법들이 있다.
3개의 문자열 Handel
, Händel
, Haendel
을 포함하는 집합은 패턴 H(ä|ae?)ndel
으로 지정이 가능
수직선은 여러 항목 중 선택을 하기 위해 구분한다.
gray|grey
는 "gray"
또는 "grey"
와 일치한다.
괄호를 사용하면 연산자의 범위와 우선권을 정의할 수 있다.
gray|grey
와 gr(a|e)y
는 "gray"
나 "grey"
집합을 둘 다 기술하는 동일 패턴이다.
?
물음표는 0번 또는 1차례까지의 발생을 의미한다.
colou?r
는 "color"
와 "colour"
를 둘 다 일치시킨다.
*
별표는 0번 이상의 발생을 의미한다.
ab*c
는 "ac"
, "abc"
, "abbc"
, "abbbc"
등을 일치시킨다.
+
덧셈 기호는 1번 이상의 발생을 의미한다.
ab+c
는 "abc"
, "abbc"
, "abbbc"
등을 일치시키지만 "ac"
는 일치시키지 않는다.
{n}[6]
n
번만큼 일치시킨다.{min,}[6]
"min"
번 이상만큼 일치시킨다.{min,max}[6]
"min"
번만큼 일치시키지만 "max"
번을 초과하여 일치시키지는 않는다.정규 표현식의 패턴은 대상 문자열과 일치시킨다.
하나의 원자는 정규 표현식 패턴 안의 하나의 점이며, 대상 문자열과 일치시키기 위해 존재한다.
가장 단순한 형태의 원자는 리터럴(literal)
이지만 원자를 일치시키기 위해 패턴을 묶을 때에는 메타문자로서 ( )
를 사용해야 한다.
메타문자
수량자(quantifier)
논리적 OR 문자
NOT 문자
역참조(backreference)
프로그래밍 언어에서 정규 표현식을 입력할 때, 통상적인 문자열 리터럴로 표현할 수 있으므로 일반적으로 인용 부호로 처리된다.
C, 자바, 파이썬에서는, 정규표현식 re는 re
로 입력된다.
구분 문자로 슬래시를 사용하는 경우도 있는데 정규 표현식 re에 대해서 /re/
를 사용하는 식이다.
이는 ed라는 편집기에서 기원하며, /
는 검색을 위한 편집기 명령어이고, /re/
라는 식은 특정한 범위의 줄들을 지정하는데 사용할 수 있다.
비슷한 방식이 sed에서 사용되는데, 검색 후 치환은 s/re/replacement/
를 사용
패턴은 /re1/,/re2/
처럼 특정한 범위의 줄을 지정하여 쉼표(,
)로 결합할 수 있다.