Recent posts

Recent comments

Archive

Calender

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

출처 : MSDN Library
Visual Studio 2005 & Visual Studio 2008 & Visual Studio 2010 을 종합한 내용이며,
흐린 색으로 표시된, 괄호() 안의 내용은 개인적으로 덧붙인 사족입니다. ^^*
어려운 말이 등장하는데, 사족이 없다면 "아,,, 얘도 모르는구나,,," 하시면 됩니다. ㅡ.ㅡ;;
제가 잘못 이해하고 있는 부분이 있다면 댓글을 달아 주십시오. 그런 지적질(?)은 언제나 환영입니다. *^^*


수량자

일치 항목을 구성하는 문자 수를 지정할 수 없는 경우, 정규식에서는 수량자의 개념을 지원합니다.


수량자를 사용하여 원하는 횟수만큼 문자 또는 문자 집합이 반복되는 정규식을 작성할 수 있습니다.
(수량자는 메타문자에 속합니다)


수량자는 해당 수량자 바로 앞(왼쪽)에 있는 식을 참조합니다.


수량자는 중괄호({})로 묶이고 발생 빈도의 상한과 하한을 지정하는 숫자 값을 포함합니다.
예를 들어, c{1,2}는 문자 c가 한 번 또는 두 번 나오는 항목을 찾습니다.


숫자가 하나만 지정되어 있고 그 뒤에 쉼표가 오지 않는 경우 이 숫자는 상한으로 사용됩니다.
예를 들어, c{3}은 문자 c가 정확히 세 번 나오는 항목을 찾고 c{5,}는 문자 c가 다섯 번 이상 나오는 항목을 찾습니다.


이러한 수량자를 사용하면 일치가 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} n개 이상 m개 미만을 찾습니다. m 및 n은 n <= m인, 음수가 아닌 정수입니다.
예를 들어, o{1,3}은 fooooood의 처음에 오는 3개의 o를 찾습니다.
o{0,1}은 o?과 같습니다. 쉼표와 숫자 사이에는 공백을 넣을 수 없습니다.
[표 4] 수량자의 의미

장 번호는 대규모의 입력 문서에서는 금방 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 또는 최소 일치로 변환됩니다.



이 내용이 도움이 되셨다면, 아래의 하트 버튼을 눌러주세요. *^^*

'정규식 (정규표현식) > MSDN Library' 카테고리의 다른 글

06 정규식 - 교체 / 그룹화 / 역참조  (0) 2014.12.11
05 정규식 - 앵커  (0) 2014.12.11
03 정규식 - 문자 일치  (0) 2014.12.11
02 정규식 - 문자의 종류  (0) 2014.12.11
01 정규식의 개념  (0) 2014.12.11