메타문자 수량자

(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. 정규표현식 예
  1.   기술공통
  2.   기초과학
  3.   진동/파동
  4.   방송/멀티미디어/정보이론
  5.   전기전자공학
  6.   통신/네트워킹
  7.   정보기술(IT)
        1. 정보기술
    1.   전산기초
    2.   컴퓨터구조
    3.   프로그래밍
          1. 프로그램, 프로그래밍
      1.   프로그래밍 언어론
      2.   프로그래밍 방법론
      3.   객체지향 프로그래밍
      4.   자료표현코드
      5.   자료구조
      6.   알고리즘
      7.   시스템 소프트웨어
        1.   번역/번역기
        2.   컴파일러
        3.   정규표현식
          1.   1. 정규 표현식
              2. 메타 문자
              3. 메타문자 수량자
              4. 메타문자 그룹화
              5. 메타문자 앵커
              6. 정규표현식 활용 기초
              7. 정규표현식 예
        4.   (기타)
      8.   프로그래밍언어 종류
      9.   프로그래밍 기타일반
    4.   데이터베이스
    5.   소프트웨어 공학
    6.   운영체제
    7.   정보보호/보안
    8.   IT 기타기술
  8.   공학일반(기계,재료등)
  9.   표준/계측/품질
  10.   기술경영

 
        최근수정     요약목록     참고문헌