정규식 리터럴은 강세표로 묶인 문자 시퀀스입니다. 정규식 리터럴의 여러 문자에는
특수한 의미가 있습니다. 이러한 문자에 역슬래시가 없는 한 특수한 의미가 포함됩니다. 특수 문자는
., \, [, ], ?, *, +, ^, 및 $입니다.
정규식 리터럴에 문자 이스케이프 시퀀스를 포함할 수 있습니다.
허용되는 이스케이프 시퀀스는 \t, \r, \n 및 \xdd이며,
탭, 캐리지 리턴, 줄 바꾸기 및 16진수 dd와 동일한 ASCII 코드가 있는 문자를 의미합니다.
정규식에
반복 구조가 있습니다. 이는 더 작은 하위 표현식으로부터 형성됩니다. 모든 정규식의 빌딩 블록은 단일 문자를 일치시키기 위한 표현식입니다.
이러한 기본 표현식에 다음과 같은 세 가지 양식이 있습니다.
- 마침표(.)는 단일 문자와 일치하는 정규식입니다. 예를 들어, `.`는 a, 5,
#, \n 및 " 등과 일치합니다.
- 특수 문자 이외의 모든 문자 또는 역슬래시가 붙은 특수 문자는
해당 문자와 일치하는 정규식입니다. 예를 들어, `a`, `5` 및 `\*`는 a, 5
및 *와 각각 일치합니다.
- 대괄호로 묶인 문자 세트는 세트에서 하나의 문자와 일치하는 정규식입니다.
예를 들어, `[abc]`는 a, b 또는 c 중 하나와 일치합니다.
세트의 첫 번째 문자가 캐럿(^)인 경우 정규식이 지정된 문자 세트의 보수와 일치합니다.
따라서 `[^abc]`는 a, b 및 c 이외의 모든 문자와 일치합니다.
편의를 위해 문자 범위를 대시로 지정할 수 있습니다. 범위에는 하한과 상한 사이의 모든 문자가 포함됩니다. 예를 들어, `[a-zA-Z0-9]`는
모든 문자 또는 숫자와 일치합니다.
이러한 빌딩 블록에서 다음과 같은 방법으로 더 큰 정규식을 형성할 수 있습니다.
- re1 및 re2가 정규식인 경우
re1 re2(연결)는
양식 s1s2의 모든 문자열과 일치하는 정규식입니다. 여기서
s1은 re1과 일치할 수 있으며 s2는
re2와 일치할 수 있습니다. 예를 들어, `[ab][01]`은 a0, a1, b0 및
b1과 일치합니다.
- re가 정규식인 경우 re?는 영(0) 또는 하나의
re 발생과 일치하는 정규식입니다.
예를 들어, `ab?`는 a 또는 ab와 일치하고 `a[01]?`는 a, a0 또는 a1과 일치합니다.
- re가 정규식인 경우 re*는 영(0) 또는 추가
re 발생과 일치하는 정규식입니다.
예를 들어, `ab*`는 a, ab, abb 및 abbb 등과
일치하고 `a[01]*`는 a, a0, a1, a00, a01 및 a11 등과 일치합니다.
- re가 정규식인 경우 re+는 하나 이상의 re 발생과 일치하는 정규식입니다.
예를 들어, `ab+`는 ab, abb 및 abbb 등과 일치하고
`a[01]+`는 a0, a1, a00, a01 및 a11 등과 일치합니다.
주: 접미부 연산자
?, *, 및
+는 연결보다 더욱 긴밀하게 바인드합니다. 따라서 ab*는
(ab)*가 아닌
a(b*)를 의미합니다.
전체 정규식을 ^ 및 $가 포함된 문자열의 시작 또는 끝에
각각 앵커할 수 있습니다. re가 정규식이면
re는 문자열 시작에서 발생하는 경우에만 re로 일치 가능한 모든 문자열과 일치하는 정규식입니다. 마찬가지로,
re$는 문자열 끝에서 발생하는 경우에만 re로 일치 가능한 모든 문자열과 일치하는
정규식입니다. 예를 들어, `^[01]+`는 a0 또는 a0110이 아닌
0 및 0110과 일치하며 `[01]+$`는 0a 또는 0110a가 아닌 0 및 0110과 일치합니다.