메타문자 수량자

(2022-02-15)

반복 수량자, Greedy Quantifier, Non-greedy Quantifier


1. [정규표현식 메타문자]  수량자 (Quantifier) 이란?

  ※ (수량자는, 1 이상의 문자들의 반복 범위를 지정할 때 쓰여짐) 
     - 기본적으로 수량자는, 
        . 별도 제한 설정을 하지 않으면, 항상 무한대의 수량을 검사하게 됨
        . 이를두고, 욕심 많은(Greedy) 수량자 라고도 함
        . 그 반대는, 욕심 없는(Non-Greedy) 수량자라고 함


2. 수량자 (quantifier) (반복)  :  *,  +,  ?,  { }

  ㅇ  ?     :  (0 또는 1회 만 매치) 
     - 직전 문자가 없거나(0), 일회(1) 만 일치함
        . 例) https?  =>  http 또는 https 둘 중 어느 것도 일치
        . 例) (?  =>  여는 괄호가 있어도 되고 없어도 됨
        . 例) [ -]?  =>  공백문자( ) 또는 하이픈(-) 또는 문자 없어도 됨

     - 기본적으로  ? 는, 욕심을 제한하는 수량자 임 (욕심 없는, Non-Greedy)
        .  *?   :   (최소 0개 즉, 최소 매치)
        .  +?   :   (최소 1개 즉, 1회 만 매치)
        .  ??   :   (최소 0개)

  ㅇ  *     :  (최소 0회 이상 반복 매치)
     - 직전 문자가 0회 이상 반복 일치함 (없거나 1회 이상)
        . 例) 123a*  =>  123, 123a, 123aa, 123aaa, ... 등 
        . 例) a*  =>  a,aa,aaa 등과는 일치하나, aba와는 불일치
        . 例) k.*d  =>  k tword, k  tword, ktword, ktword d 등
           .. (여기서, .* 은 임의 문자가 0회 이상 반복될 때 매치됨)
     - 탐욕적(Greedy) 수량자 임

  ㅇ  +     :  (최소 1회 이상 반복 매치) => 탐욕적(Greedy) 수량자 임
     - 직전 문자가 1회 이상 일치함 (최소 1회 이상)
        . 例) \d+  =>  하나 이상 연속된 숫자
     - 탐욕적(Greedy) 수량자 임      ☞ 아래 3.항 참조

  ※ 특히, 위 *, + 는, 메타문자 . (즉, .*, .+) 와 조합시켜 사용할 때가 많음

  ㅇ  {n}   :  (n회 반복)
     - 정확히 n번 반복
        . 例) x{2} => xx        

  ㅇ  {n,}  :  (n번 이상 반복)
     - 적어도 n회 이상 반복 매치
        . 例) `x*` 및 `x{0,}`  =>  이 둘이 동일함
        . 例) `x+` 및 `x{1,}`  =>  이 둘이 동일함
        . 例) `x?` 및 `x{0,1}`  => 이 둘이 동일함
     - 탐욕적(Greedy) 수량자 임

  ㅇ  {n,m} :  (범위 지정 반복, n회부터 m회까지 반복)
     - 최소 n번부터 최대 m번까지 반복
        . 例) x{1,4}  =>  x|xx|xxx|xxxx 과 동일한 표현식


3. 탐욕적(Greedy) 수량자 : *, +, {n,}

  ㅇ 이 세 수량자는, 
     - 텍스트의 앞부터 탐색하는 것이 아니라,
     - 텍스트의 마지막부터 한꺼번에 전부 찾으므로, 과도하게 일치됨

  ㅇ 따라서, 이를 다음과 같이 게으른(Lazy,욕심 없는) 수량자로 바꾸면 좋음
     -  *  →  *?
     -  +  →  +?
     -  {n,} →  {n,}?

정규표현식
   1. 정규 표현식   2. 메타 문자   3. 메타문자 수량자   4. 메타문자 그룹화   5. 메타문자 앵커   6. 정규표현식 활용 기초   7. 정규표현식 예  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"