때때로 나는 얼마나 많은 캐릭터가 일치 해야할지 모른다. 이러한 불확실성에 적응할 수 있으려면 정규 표현은 예선의 개념을 지원합니다. 이 예선은 경기가 충족되기 전에 정규 표현식의 주어진 구성 요소가 몇 번이나 나타나야하는지 지정할 수 있습니다.
다음 표는 다양한 예선과 그 의미에 대한 설명을 제공합니다.
성격 | 설명하다 |
---|---|
* | 이전 서브 발현이 0 또는 여러 번 일치합니다. 예를 들어, Zo*는 Z와 Zoo와 일치 할 수 있습니다. * {0,}와 같습니다. |
+ | 이전 하위 표현과 한 번 이상 일치합니다. 예를 들어, 'Zo+'는 ZO와 동물원과 일치 할 수 있지만 Z는 아닙니다. +는 {1,}와 같습니다. |
? | 이전 서브 발현 0 또는 한 번과 일치합니다. 예를 들어, (ES)는 할 수 있습니까? ? {0,1}과 같습니다. |
{ N } | N은 음이 아닌 정수입니다. 결정된 N 시간을 일치시킵니다. 예를 들어, 'o {2}'는 Bob에서 'O'와 일치 할 수 없지만 음식의 두 가지 OS와 일치 할 수 있습니다. |
{ N ,} | N은 음이 아닌 정수입니다. 적어도 n 번 일치합니다. 예를 들어, 'o {2,}'는 Bob에서 'o'와 일치 할 수는 없지만 fooooood의 모든 OS와 일치 할 수 있습니다. 'o {1,}'는 'o+'와 같습니다. 'o {0,}'는 'o*'와 같습니다. |
{ n , m } | m 과 n은 모두 음이 아닌 정수이며, 여기서 n <= m . 최소한 n 번 일치하고 최대 m 시간을 일치시킵니다. liu, o {1,3}는 Fooooood의 첫 3 개의 OS와 일치합니다. 'o {0,1}'은 'o?'와 같습니다. 쉼표와 두 숫자 사이에는 공백이 없을 수 있습니다. |
큰 입력 문서의 경우, 챕터의 수는 9 개의 챕터를 쉽게 초과 할 수 있으므로 2 자리 또는 3 자리 챕터 번호를 처리 할 수있는 방법이 있습니다. 예선은이 기능을 제공합니다. 다음 JScript 정규식은 장 제목과 모든 비트와 일치 할 수 있습니다.
/Chapter [1-9][0-9]*/
다음 vbscript 정규식은 동일한 일치를 수행합니다.
Chapter [1-9][0-9]*
예선은 범위 표현식 후에 나타납니다. 따라서 포함 된 전체 범위 표현식에 적용되며,이 경우 0에서 9까지의 숫자 만 지정됩니다.
'+'예선은 여기에서 사용되지 않습니다. 두 번째 또는 후속 위치에서 숫자가 반드시 필요한 것은 아니기 때문입니다. 또한 '?' '가 사용됩니다. 이는 장의 수를 두 자리로만 제한하기 때문에 사용됩니다. '챕터'와 공간 문자 이후에는 적어도 하나의 숫자가 일치해야합니다.
장 제한이 99 장으로 알려진 경우 다음 JScript 표현식을 사용하여 최소한 하나의 숫자를 지정하지만 두 숫자를 지정할 수 있습니다.
/Chapter [0-9]{1,2}/
VBScript의 경우 다음과 같은 정규식을 사용할 수 있습니다.
Chapter [0-9]{1,2}
위의 표현의 단점은 99보다 큰 장 번호가 있으면 여전히 처음 두 자리에 맞는 것입니다. 또 다른 단점은 어떤 사람들은 0 장을 만들고 여전히 일치 할 수 있다는 것입니다. 두 자리 숫자와 일치하는 더 나은 jscript 표현식은 다음과 같습니다.
/Chapter [1-9][0-9]?/
또는
/Chapter [1-9][0-9]{0,1}/
vbscript의 경우 다음 표현식은 위와 같습니다.
Chapter [1-9][0-9]?
또는
Chapter [1-9][0-9]{0,1}
' *
', ' +'
및 ' ?'
모두 Greedy 라고 불립니다. 때때로 이것은 당신이 전혀 일어나고 싶은 것이 아닙니다. 때때로 그것은 단지 가장 작은 경기 일뿐입니다.
예를 들어 HTML 문서를 검색하여 H1 태그에 포함 된 장 제목을 찾으십시오. 문서에서 텍스트는 다음과 같은 형식을 가질 수 있습니다.
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
다음 표현식은 시작 (<)보다 시작부터 H1 마커의 끝까지 모든 것을 일치시킵니다.
/<.*>/
vbscript의 정규 표현은 다음과 같습니다.
<.*>
일치해야 할 것은 시작 H1 태그 인 경우 다음이 아닌 표현식은 <H1> 만 일치합니다.
/<.*?>/
또는
<.*?>
'*', '+'또는 'equalifiers를 배치함으로써, 표현은 탐욕스러운 경기에서 비 기업 또는 최소한의 경기로 바뀝니다.
지금까지 본 예제는 어디에나 나타나는 장 제목을 찾는 것을 고려합니다. 공간과 숫자가 뒤 따르는 문자열 '챕터'는 실제 장 제목 또는 다른 장에 대한 십자가 참조 일 수 있습니다. 실제 장 제목은 항상 줄의 시작 부분에 나타나기 때문에 크로스 참조가 아닌 제목 만 찾는 메소드를 설계해야합니다.
로케이터는이 기능을 제공합니다. 로케이터는 라인의 시작 또는 끝에서 정규 표현을 고칠 수 있습니다. 또한 단어 내에서만 또는 단어의 시작 또는 끝에서만 나타나는 정규식을 만들 수 있습니다. 다음 표에는 정규 표현 목록과 그 의미가 포함되어 있습니다.
성격 | 설명하다 |
---|---|
^ | 입력 문자열의 시작 위치와 일치합니다. regexp 객체의 멀티 린 속성이 설정되면 ^도 '/n'또는 '/r'이후 위치와 일치합니다. |
$ | 입력 문자열의 끝 위치와 일치합니다. regexp 객체의 멀티 린 속성이 설정된 경우 $도 '/n'또는 '/r'이전 위치와 일치합니다. |
/비 | 단어 경계와 일치합니다. 즉, 단어와 공간 사이의 위치를 의미합니다. |
/비 | 비 단어 경계와 일치합니다. |
로케이터에는 예선을 사용할 수 없습니다. Newline 또는 Word 경계 전후에 연속적인 위치가 없기 때문에 '^*'와 같은 표현은 허용되지 않습니다.
텍스트 줄의 시작 부분에서 텍스트를 일치 시키려면 정규 표현식의 시작 부분에서 '^'문자를 사용하십시오. 이 구문을 '^'의 구문을 괄호 표현식의 구문과 혼동하지 마십시오. 그들의 구문은 근본적으로 다릅니다.
텍스트 줄 끝에서 텍스트를 일치 시키려면 정규 표현식 끝에 '$'문자를 사용하십시오.
장 제목을 찾을 때 로케이터를 사용하려면 다음 JScript 정규식은 한 줄의 시작 부분에서 최대 두 개의 숫자의 장 제목과 일치합니다.
/^Chapter [1-9][0-9]{0,1}/
vbscript에서 동일한 함수에 대한 정규식은 다음과 같습니다.
^Chapter [1-9][0-9]{0,1}
실제 장 제목은 줄의 시작 부분에 나타날뿐만 아니라이 라인 에도이 내용 만 가지고 있으므로 줄의 끝에 있어야합니다. 다음 표현식은 지정된 경기가 장과 일치하고 교차 참조와 일치하지 않도록합니다. 그것은 문자 줄의 시작 및 끝 위치에만 일치하는 정규 표현식을 만들어 달성됩니다.
/^Chapter [1-9][0-9]{0,1}$/
vbscript의 경우 사용하십시오.
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
일치하는 단어 경계는 약간 다르지만 정규식에 매우 중요한 기능을 추가합니다. 단어 경계는 단어와 공간 사이의 위치입니다. 비 단어 경계는 다른 곳에 있습니다. 다음 jscript 표현식은 단어 경계 이후에 나타나기 때문에 '챕터'라는 단어의 처음 세 문자와 일치합니다.
//bCha/
vbscript :
/bCha
'/b'연산자의 위치는 여기서 중요합니다. 문자열의 시작 부분에 일치하는 경우, 단어의 시작 부분에서 일치하는 것이 문자열의 끝에 있다면, 단어의 끝 부분에 일치하는 것을 찾습니다. 예를 들어, 다음 표현식은 단어 경계 앞에 나타나기 때문에 '챕터'라는 단어에서 'ter'와 일치합니다.
/ter/b/
게다가
ter/b
다음 표현은 'apt'의 중간에 있기 때문에 'apt'와 일치하지만 'aptitude'에서 'apt'와 일치하지 않습니다.
//Bapt/
게다가
/Bapt
이는 'apt'가 '챕터'라는 단어와 '적성'이라는 단어에 비 단어 경계 위치에 나타나기 때문입니다. 비 단어 경계 연산자의 위치는 일치가 단어의 시작 또는 끝과 관련이 없기 때문에 중요하지 않습니다.