메타문자 수량자

(2020-04-01)

반복 수량자, 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*  =>  123a, 123b, 123c, ... 등 직전 문자 일치 없으나, 그 앞의 문자열과 일치
        . 例) a*  =>  a,aa,aaa 등과는 일치하나, aba와는 불일치
        . 例) k.*d  =>  k tword, k  tword, ktword, ktword d 등
           .. (여기서, .* 은 임의 문자가 0회 이상 반복될 때 매치됨)
     - 탐욕적(Greedy) 수량자 임

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

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

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

  ㅇ  {n}   :  (n회 반복)
        . 정확히 n번 반복

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

  ※ 탐욕적(Greedy) 수량자 : *, +, {n,}
     - 이 세 수량자는, 텍스트의 앞부터 탐색하는 것이 아니라, 마지막부터 한꺼번에 전부 찾으므로,
       과도하게 일치됨
     - 따라서, 이를 다음과 같이 게으른(Lazy,욕심 없는) 수량자로 바꾸면 좋음
        .  *  →  *?
        .  +  →  +?
        .  {n,} →  {n,}?


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

 
        요약목록     참고문헌