정규표현 메타 문자

(2018-12-31)

메타 문자, 앵커

1. 메타 문자 (특수 문자 기호)정규표현식 내 특별한 의미를 갖는 문자 기호
     - 비록, 정규표현식이,
        . 기본 연산 셋(연접,반복,선택) 만으로도 표현 가능하지만,
        . 특별한 의미를 갖는 문자들로써, 
        . 프로그래머 관점으로 정규표현식을 보다 쉽게 표현할 수 있는 방법임
     - 例) 선택 `|`, 문자 클래스 `[]`, 서브 패턴 `()`, 수량자 `* + ? {}`, 앵커 `^ $ \ 등`,
           점 `.`, 수정자 `g i m s` 등


2. 선택 (selection)  :  | 

  ㅇ | (OR,선택 또는 UNION,합)
     -  例) the|The|THE => the 또는 The 또는 THE 라는 문자열 패턴을 나타냄

  ㅇ 주요 역할
     - 2 이상의 패턴 중 하나를 선택할 때


3. 문자 클래스(character class) (한 문자)  :  [ ]

  ※ (문자 클래스는, 특정한 한 문자를 나타냄)
     - `[ ]` 안에 여러 문자를 나열할 수도, `-`를 이용하여 문자열 범위 지정도 가능

  ㅇ 대괄호 [ ] 내에 지정된 모든 문자들에서 한 문자와의 일치를 뜻함
     -  例) 0부터 9까지 숫자 1개를 찾는 문자 클래스는, [0123456789]
     -  例) 영어 소문자 모음 1개를 찾는 문자 클래스는, [aeiou]

  ㅇ 문자 클래스 내 범위 지정  :  -  (ASCII 코드 순서에 따름)
     -  例) [0-9] : 0부터 9까지 숫자
     -  例) [a-zA-Z] : 영문 알파벳 문자
        . 참고로, `-` 자체를 포함하려면, [-a-z] 또는 [a-z-] 처럼 맨앞이나 맨뒤에 적으면 됨

  ㅇ 문자 클래스 내 부정  :  선두 위치에 ^를 쓰면 부정
     -  例) [^0-9A-Za-z] : 숫자나 영문 알파벳 이외의 모든 문자에 일치함


4. 서브 패턴 (그룹화)  :  ( )

  ※ (서브 패턴은, 부품 단위로 감싸서 구별짓기 위함)
     -  例) color 또는 colour 매치하려면, col(o|ou)r

  ㅇ 주요 역할
     - 연산 우선순위 명시
     - 서브 패턴을 만들고자 할 때
     - 나중에 역참조하기 위해 참조그룹을 지정할 때
     - 그룹으로 묶은 패턴에 수량자를 붙여 어떤 작업에 적용할 때
     - 비 참조 그룹을 사용할 때
     - 일치한 문자열 저장 (캡처) 등

  ㅇ 기본적인 그룹화 : (), (?:)
     - 매치 결과를 캡쳐(저장)하는 그룹, ()
     - 매치 결과를 캡쳐(저장)하지 않는 그룹, (?:)

  ㅇ 탐색 방향을 결정하는 그룹화
     - 긍정형 전방탐색 : (?=)
     - 부정형 전방탐색 : (?!) 
     - 긍정형 후방탐색 : (?<=)
     - 부정형 후방탐색 : (?<!)


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

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

  ㅇ  *     :  (최소 0회 이상 매치)
     - 직전 문자가 0회 이상 반복 일치함 (없거나 1회 이상)
        . 例) 123a* => 123a, 123b, 123c, ... 등 직전 문자 일치 없으나, 그 앞의 문자열과 일치
  ㅇ  +     :  (최소 1회 이상 매치)
     - 직전 문자가 1회 이상 일치함 (최소 1회 이상)

  ㅇ  ?     :  (0 또는 1회 만 매치) 
     - 직전 문자가 없거나(0), 일회(1) 만 일치함
        . 例) https? => http 또는 https 둘 중 어느 것도 일치

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

  ㅇ  {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}` => 동일


6. 앵커(anchor) : ^,  $ 등

  ※ (문자열이 아니고, 주로 위치에 일치시키는 것)

  ㅇ 위치 고정 앵커  :  ^,  $
     - (정규식 패턴을 특정 위치에 고정하여, 그 위치에 일치시키기 위함)

     -  ^ : 행의 처음
     -  $ : 행의 끝

  ㅇ 특정 용도 앵커  :  \
     - (\와 순수 문자와의 조합으로 특정 용도에 사용)

     -  \A  :  텍스트 선두

     -  \b  :  단어 경계(word boundary)
        .  문자열이 아닌, 문자열 사이 위치에 일치함
     -  \B  :  위 \b의 반대 (단어 경계를 제외한 모든 문자)

     -  \z  :  텍스트 끝

  ㅇ 기타 용도 앵커 : 
     -  \d  :  1개 숫자에 일치
        .  [0-9]에 해당
     -  \D  :  위 \d의 반대 (숫자가 아닌 모든 문자)

     -  \w  :  1개 문자(영문자,숫자)에 일치 
        .  [0-9a-zA-Z]에 해당. 즉, 숫자 및 영문 알파벳 문자
     -  \W  :  \w의 부정

     -  \s  :  1개 공백문자에 일치 
        .  (공백,수평탭,캐리지리턴,줄바꿈,폼피드 등) [\t\r\n\f]
     -  \S  :  위 \s의 반대 (공백문자가 아닌 모든 문자)

     -  \.  :  마침표 `.`에 일치
        .  (임의 한 문자 `.`와의 혼동 방지)


7. 점 (임의 한 문자)  :  .

  ㅇ `문자`,`숫자`,`_`,`@`,`쉼표(,)`,`따옴표(')`,`공백 문자` 포함
     - (공백 문자 : 스페이스 바,백 스페이스,수평탭,수직탬,폼피드,줄바꿈 문자)
        . 단, 점(.) 수량자는 공백문자줄바꿈 문자 만은 제외(예외)하고 있음

  ㅇ 例)
     -  .+   => 모든 문자열이 매치됨
     -  r.*e => re, rare, recognize 등 r로 시작하고 e로 끝나는 임의 문자열들이 매치됨


8. 수정자(modifier) 또는 옵션  :  g,  i,  m,  s

  ※ (검사 위치,범위를 수정해 줌)

  ㅇ  g (global)      : 전역 검색 
     - 모든 일치를 전부 대상으로 함
     - 그렇지 않으면(즉, g가 아니면/없으면), 최초 일치 만

  ㅇ  i (ignore case) : 대소문자 구분 안함

  ㅇ  m (multi line)  : 일치 대상에 줄바꿈이 있더라도 전체 검색
     - 따라서, 전체 라인 모두를 매 라인별로 검색 가능

  ㅇ  s (single line, dotall) : `임의 한 문자 . `에 줄바꿈 문자까지도 포함
     - 따라서, 전체 라인 모두를 한 라인 처럼 일치할 때까지 모두다 검색 가능


9. 기타

  ㅇ 이스케이프  :  \ 또는 \                     ☞ 이스케이프 시퀀스(Escape Sequence) 참조
     -  (표시 불가능한 문자를 표현코자할 때)


[정규표현식] 1. 정규 표현식 2. 정규표현 메타 문자 3. 정규표현식 활용 기초 4. 정규표현식 예

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