정규식 구문

정규식은 텍스트 본문을 검색할 때 일치하는 것으로 간주할 하나 이상의 문자열을 표현합니다. 식은 문자 패턴을 검색되는 문자열과 비교하기 위한 템플릿으로 사용됩니다.

정규식은 일반 문자(예: a-z 문자)와 메타문자로 알려진 특수 문자로 구성됩니다.

특수 문자

다음 표에서는 정규식에 사용되는 단일 문자로 된 메타문자와 그 동작을 설명합니다.

참고

이러한 특수 문자 중 하나를 찾으려면 먼저 문자를 이스케이프해야 합니다. 즉, 해당 문자 앞에 백슬래시 문자(\)를 추가합니다. 예를 들어 리터럴 문자 "+"를 검색하려면 "\+" 식을 사용합니다.

메타문자

동작

예제

*

앞의 문자나 하위 식을 0개 이상 찾습니다.

{0,}와 같습니다.

zo*는 "z"와 "zoo"를 찾습니다.

+

앞의 문자나 하위 식을 1개 이상 찾습니다.

{1,}와 같습니다.

zo+는 "zo"와 "zoo"를 찾지만 "z"는 찾지 않습니다.

?

앞의 문자나 하위 식을 0개나 1개 찾습니다.

{0,1}과 같습니다.

?가 *, +, ?, {n}, {n,} 또는 {n,m} 등의 다른 수량자 바로 뒤에 오면 일치하는 패턴은 non-greedy입니다. non-greedy 패턴은 검색되는 문자열에서 가능한 한 적은 부분을 찾습니다. 기본 greedy 패턴은 검색되는 문자열에서 가능한 한 많은 부분을 찾습니다.

zo?는 "z"와 "zo"를 찾지만 "zoo"는 찾지 않습니다.

o+?는 "oooo"에 있는 한 개의 "o"를 찾으며, o+는 모든 "o"를 찾습니다.

do(es)?는 "do" 또는 "does"에 있는 "do"를 찾습니다.

^

검색되는 문자열의 시작 부분에서 위치를 찾습니다. 플래그와 함께 m(여러 줄 검색) 문자를 포함하면 ^은 \n 또는 \r 다음의 위치도 찾습니다.

대괄호 식의 첫 번째 문자로 사용될 경우 ^은 해당 문자 집합을 부정합니다.

^\d{3}은 검색되는 문자열의 시작 부분에서 3개의 숫자를 찾습니다.

[^abc]는 a, b 및 c를 제외한 모든 문자를 찾습니다.

$

검색되는 문자열의 끝 부분에서 위치를 찾습니다. 플래그와 함께 m(여러 줄 검색) 문자를 포함하면 ^은 \n 또는 \r 앞의 위치도 찾습니다.

\d{3}$은 검색되는 문자열의 끝 부분에서 3개의 숫자를 찾습니다.

.

줄 바꿈 문자 \n을 제외한 모든 단일 문자를 찾습니다. \n을 비롯한 모든 문자를 찾으려면 [\s\S] 같은 패턴을 사용합니다.

a.c는 "abc", "a1c" 및 "a-c"를 찾습니다.

[]

대괄호 식의 시작 및 끝 부분을 표시합니다.

[1-4]는 "1", "2", "3" 또는 "4"를 찾습니다. [^aAeEiIoOuU]는 모음이 아닌 모든 문자를 찾습니다.

{}

수량자 식의 시작 및 끝 부분을 표시합니다.

a{2,3}은 "aa" 및 "aaa"를 찾습니다.

()

하위 식의 시작 및 끝 부분을 표시합니다. 나중에 사용하기 위해 하위 식을 저장할 수도 있습니다.

A(\d)는 "A0"부터 "A9"까지를 찾습니다. 숫자는 나중에 사용하기 위해 저장됩니다.

|

둘 이상의 항목 사이에서 선택함을 나타냅니다.

z|food는 "z" 또는 "food"를 찾습니다. (z|f)ood는 "zood" 또는 "food"를 찾습니다.

/

JScript에서 리터럴 정규식 패턴의 시작과 끝을 나타냅니다. 두 번째 "/" 다음에 단일 문자 플래그를 추가하여 검색 동작을 지정할 수 있습니다.

/abc/gi는 "abc"를 찾는 JScript 리터럴 정규식입니다. g(전역) 플래그는 해당 패턴이 나타나는 모든 항목을 찾도록 지정하고 i(대/소문자 무시) 플래그는 검색 시 대/소문자를 구분하지 않도록 지정합니다.

\

다음에 오는 문자를 특수 문자, 리터럴, 역참조 또는 8진수 이스케이프로 표시합니다.

\n은 줄 바꿈 문자를 찾습니다. \(는 "("를 찾습니다. \\는 "\"를 찾습니다.

대부분의 특수 문자는 대괄호 식 내에 사용될 경우 본래 의미를 잃고 일반 문자를 나타냅니다. 자세한 내용은 일치하는 문자 목록에서 "대괄호 식의 문자"를 참조하십시오.

메타문자

다음 표에서는 정규식에 사용되는 여러 문자로 된 메타문자와 그 동작을 설명합니다.

메타문자

동작

예제

\b

단어 경계, 즉 단어와 공백 사이의 위치를 찾습니다.

er\b는 "never"의 "er"은 찾지만 "verb"의 "er"은 찾지 않습니다.

\B

단어 비경계를 찾습니다.

er\B는 "verb"의 "er"은 찾지만 "never"의 "er"은 찾지 않습니다.

\d

숫자를 찾습니다.

[0-9]와 같습니다.

검색되는 문자열이 "12 345"일 때 \d{2}는 "12"와 "34"를 찾습니다. \d는 "1", "2", "3", "4" 또는 "5"를 찾습니다.

\D

숫자가 아닌 문자를 찾습니다.

[^0-9]와 같습니다.

\D+는 "abc123 def"의 "abc"와 " def"를 찾습니다.

\w

A-Z, a-z, 0-9 및 밑줄 문자를 모두 찾습니다.

[A-Za-z0-9_]과 같습니다.

검색되는 문자열이 "The quick brown fox…"일 때 \w+는 "The", "quick", "brown" 및 "fox"를 찾습니다.

\W

A-Z, a-z, 0-9 및 밑줄을 제외한 모든 문자를 찾습니다.

[^A-Za-z0-9_]과 같습니다.

검색되는 문자열이 "The quick brown fox…"일 때 \W+는 "…"와 모든 공백을 찾습니다.

[xyz]

문자 집합입니다. 지정한 문자 중 하나를 찾습니다.

[abc]는 "plain"의 "a"를 찾습니다.

[^xyz]

부정 문자 집합입니다. 지정하지 않은 모든 문자를 찾습니다.

[^abc]는 "plain"의 "p", "l", "i" 및 "n"을 찾습니다.

-a[z]

문자 범위입니다. 지정한 범위에서 문자를 찾습니다.

[a-z]는 "a"부터 "z"까지의 범위에서 소문자 영문자를 찾습니다.

[^a-z]

부정 문자 범위입니다. 지정한 범위에 있지 않은 모든 문자를 찾습니다.

[^a-z]는 "a"부터 "z"까지의 범위에 있지 않은 모든 문자를 찾습니다.

{n}

정확히 n개를 찾습니다. n은 음이 아닌 정수입니다.

o{2}는 "Bob"의 "o"는 찾지 않지만 "food"에 있는 두 개의 "o"는 찾습니다.

{n,}

n개 이상을 찾습니다. n은 음이 아닌 정수입니다.

*는 {0,}와 같습니다.

+는 {1,}와 같습니다.

o{2,}는 "Bob"의 "o"는 찾지 않지만 "foooood"에 있는 모든 "o"는 찾습니다.

{n,m}

n개 이상 m개 이하를 찾습니다. n과 m은 음수가 아닌 정수이며, n은 m보다 작거나 같습니다. 쉼표와 숫자 사이에 공백이 있으면 안 됩니다.

?는 {0,1}과 같습니다.

검색되는 문자열이"1234567"일 때 \d{1,3}은 "123", "456" 및 "7"을 찾습니다.

(pattern)

pattern을 찾고 일치하는 항목을 저장합니다. JScript에서는 exec 메서드가 반환한 배열 요소에서 저장된 일치 항목을 검색할 수 있습니다. 괄호 문자 ( )를 찾으려면 '"\(" 또는 "\)"를 사용합니다.

(Chapter|Section) [1-9]는 "Chapter 5"를 찾고, 나중에 사용하기 위해 "Chapter"를 저장합니다.

(?:pattern)

pattern을 찾지만, 일치 항목을 저장하지는 않습니다. 즉, 일치 항목이 나중에 사용할 수 있도록 저장되지 않습니다. 패턴의 일부를 "or" 문자(|)를 사용하여 결합할 때 유용합니다.

industr(?:y|ies)는 industry|industries와 같습니다.

(?=pattern)

긍정 lookahead입니다. 일치 항목을 찾은 후 일치한 텍스트의 앞에서 다음 일치 항목에 대한 검색을 시작합니다. 일치 항목은 나중에 사용하기 위해 저장되지 않습니다.

^(?=.*\d).{4,8}$는 암호가 4-8개의 문자로 구성되고 적어도 하나의 숫자를 포함하도록 하는 제한을 적용합니다.

패턴 내에서 .*\d는 임의 개수의 문자와 그 다음에 숫자가 오는 경우를 찾습니다. 검색되는 문자열이 "abc3qr"일 때 이는 "abc3"과 일치합니다.

.{4,8}은 일치 항목의 뒤가 아니라 앞에서 시작해서 4-8개의 문자열을 찾습니다. 이는 "abc3qr"과 일치합니다.

^ 및 $는 검색되는 문자열의 시작 및 끝에서 위치를 지정합니다. 이는 검색된 문자열에 일치된 문자 밖의 문자가 포함되어 있으면 일치하지 않는 것으로 하기 위한 것입니다.

(?!pattern)

부정 lookahead입니다. pattern과 일치하지 않는 검색 문자열을 찾습니다. 일치 항목을 찾은 후 일치한 텍스트의 앞에서 다음 일치 항목에 대한 검색을 시작합니다. 일치 항목은 나중에 사용하기 위해 저장되지 않습니다.

\b(?!th)\w+\b는 "th"로 시작하지 않는 단어를 찾습니다.

패턴 내에서 \b는 단어 경계를 찾습니다. 검색되는 문자열이 " quick "일 때 이는 첫 번째 공백과 일치합니다. (?!th)는 "th"가 아닌 문자열을 찾습니다. 이는 "qu"와 일치합니다.

\w+는 일치 항목의 앞에서 단어를 검색합니다. 이는 "quick"과 일치합니다.

\cx

x로 표시된 제어 문자를 찾습니다. x의 값은 A-Z 또는 a-z 범위에 있어야 합니다. 그렇지 않으면 c가 리터럴 "c" 문자로 간주됩니다.

\cM은 Ctrl+M이나 캐리지 리턴 문자를 찾습니다.

\xn

n을 찾는데, 여기서 n은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리 길이여야 합니다. ASCII 코드가 정규식에 사용될 수 있습니다.

\x41은 "A"를 찾습니다. n은 정확히 두 자리여야 하므로 \x041은 "\x04" 다음에 "1"을 쓴 것과 같습니다.

\num

num을 찾는데, 여기서 num은 양의 정수입니다. 이는 저장된 일치 항목에 대한 참조입니다.

(.)\1은 두 개의 연속된 동일 문자를 찾습니다.

\n

8진수 이스케이프 값이나 역참조 중 하나를 식별합니다. \n 앞에 n개 이상의 캡처된 하위 식이 오면 n은 역참조입니다. 그렇지 않고 n이 8진수(0-7)이면 n은 8진수 이스케이프 값입니다.

(\d)\1은 두 개의 연속된 동일 숫자를 찾습니다.

\nm

8진수 이스케이프 값이나 역참조 중 하나를 식별합니다. \nm 앞에 nm개 이상의 캡처된 하위 식이 오면 nm은 역참조입니다. \nm 앞에 n개 이상의 캡처된 하위 식이 오면 n은 뒤에 리터럴 m이 오는 역참조입니다. 이러한 조건이 하나도 없으면 \nm은 8진수 이스케이프 값 nm을 찾습니다(n과 m이 8진수(0-7)인 경우).

\11은 탭 문자를 찾습니다.

\nml

n이 8진수(0-3)이고 m과 l이 8진수(0-7)인 8진수 이스케이프 값 nml을 찾습니다.

\011은 탭 문자를 찾습니다.

\un

n을 찾는데, 여기서 n은 네 자리 16진수로 표현된 유니코드 문자입니다.

\u00A9는 저작권 기호(©)를 찾습니다.

인쇄할 수 없는 문자

다음 표에는 인쇄할 수 없는 문자를 나타내는 이스케이프 시퀀스가 들어 있습니다.

문자

일치 항목

포함되는 옵션

\f

용지 공급 문자

\x0c 및 \cL

\n

줄 바꿈 문자

\x0a 및 \cJ

\r

캐리지 리턴 문자

\x0d 및 \cM

\s

모든 공백 문자. 공백, 탭 및 용지 공급 문자가 포함됩니다.

[ \f\n\r\t\v]

\S

공백이 아닌 모든 문자

[^ \f\n\r\t\v]

\t

탭 문자

\x09 및 \cI

\v

세로 탭 문자

\x0b 및 \cK

우선 순위

정규식은 수식과 유사하게 왼쪽에서 오른쪽으로 계산되고 우선 순위를 따릅니다.

다음 표에서는 정규식 연산자를 우선 순위가 높은 것부터 순서대로 설명합니다.

연산자

설명

\

이스케이프

(), (?:), (?=), []

괄호와 대괄호

*, +, ?, {n}, {n,}, {n,m}

수량자

^, $, \anymetacharacter

앵커와 시퀀스

|

교체

문자는 교체 연산자보다 더 높은 우선 순위를 가지므로 예를 들어 "m|food"로 "m"이나 "food"를 찾을 수 있습니다.

참고 항목

개념

정규식 만들기