JScript의 수량자
업데이트: 2007년 11월
일치 항목을 구성하는 문자 수를 지정할 수 없는 경우, 정규식에서는 수량자의 개념을 지원합니다. 이러한 수량자를 사용하면 일치가 true가 되기 위해 정규식의 해당 구성 요소가 몇 개 사용되어야 하는지 지정할 수 있습니다.
수량자의 의미
문자 |
설명 |
---|---|
* |
앞의 문자나 부분식을 0개 이상 찾습니다. 예를 들어, zo*는 z과 zoo를 찾습니다. *는 {0,}에 해당합니다. |
+ |
앞의 문자나 부분식을 1개 이상 찾습니다. 예를 들어, zo+는 zo와 zoo는 찾지만 z는 찾지 않습니다. +는 {1,}에 해당합니다. |
? |
앞의 문자나 부분식을 0개나 1개 찾습니다. 예를 들어, do(es)?는 do나 does에서 do를 찾습니다. ? 는 {0,1}에 해당합니다. |
{n} |
n은 음이 아닌 정수입니다. 정확히 n개 찾습니다. 예를 들어, o{2}는 Bob의 o는 찾지 않지만 food에 있는 두 개의 o는 찾습니다. |
{n,} |
n은 음이 아닌 정수입니다. n개 이상을 찾습니다. 예를 들어, o{2,}는 Bob의 o는 찾지 않지만 foooood의 o는 모두 찾습니다. o{1,}은 o+에 해당합니다. o{0,}은 o*에 해당합니다. |
{n,m} |
m 및 n은 n <= m인 음수가 아닌 정수입니다. n개 이상 m개 미만을 찾습니다. 예를 들어, o{1,3}은 fooooood의 처음에 오는 3개의 o를 찾습니다. o{0,1}은 o?에 해당합니다. 쉼표와 숫자 사이에는 공백을 넣을 수 없습니다. |
장 번호는 대규모 입력 문서에서는 쉽게 9를 넘을 수 있으므로 두 자리나 세 자리 장 번호를 처리하는 방법이 필요합니다. 수량자는 그러한 기능을 제공합니다. 다음 정규식은 자리 수에 상관없이 장 제목을 찾습니다.
/Chapter [1-9][0-9]*/
수량자는 범위 식 다음에 나타납니다. 따라서 전체 범위 식에 적용됩니다. 즉, 이 경우 숫자는 0에서 9까지만 지정합니다.
이 경우 두 번째나 그 다음 위치에 더 이상 숫자가 필요하지 않으므로 + 수량자는 사용되지 않습니다. ? 문자는 장 번호를 두 자리 수로만 제한하므로 이 문자도 사용되지 않습니다. 최소한 Chapter 문자 다음에 한 자리 수와 공백 문자 하나를 찾을 수 있습니다.
장 번호가 99 장으로만 제한되어 있다는 것을 알면 다음 식을 사용하여 한 자리 수 이상 두 자리 수 이하로 장 번호를 제한할 수 있습니다.
/Chapter [0-9]{1,2}/
위의 식의 단점은 장 번호가 99보다 큰 경우에도 첫 두 자리 수만 찾는다는 것입니다. 또 다른 단점은 Chapter 0도 찾는다는 것입니다. 두 자리 수만 찾는 더 나은 식은 다음과 같습니다.
/Chapter [1-9][0-9]?/
또는
/Chapter [1-9][0-9]{0,1}/
*, + 및 ? 수량자는 가능한 한 많은 텍스트를 찾으므로 모두 greedy로 취급됩니다. 하지만 최소 일치가 필요한 경우도 있습니다.
예를 들어, H1 태그로 묶인 장 제목의 사용에 대해 HTML 문서를 검색하는 경우, 해당 텍스트는 문서에서 다음과 같이 표시됩니다.
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
다음 식에서는 H1 태그를 여는 보다 작음 연산자 기호(<)에서 H1 태그를 닫는 보다 큼 연산자 기호(>)까지의 모든 항목을 찾습니다.
/<.*>/
여는 H1 태그를 찾으려는 경우 다음의 non-greedy 식에서는 <H1>만 찾습니다.
/<.*?>/
*, +, ? 수량자 뒤에 ?를 두면 해당 식은 greedy에서 non-greedy 또는 최소 일치로 변환됩니다.