Regular Expression   정규 표현식

(2024-07-11)

1. 정규 표현식 이란?

  ㅇ 정규 (Regular)
     - 원래, `규칙적인`,`정식인`,`좋은 성질을 갖는``,`다루기 쉬운` 등을 의미
     - 여기서는, 단순하고 쉽고 강력하며 실용적인 이라는 뜻을 내포함

  ㅇ 정규 표현식 (Regular Expression)
     - 문자열패턴을 나타내기 위한 표현식
        . 1 이상의 문자 또는 기호를 조합해 만들어진, 문자열 축약 표현식(패턴)

  ㅇ 정규 언어 (Regular Language)
     - 정규 표현식(일정 패턴을 갖는 문자열 집합)으로 형식화된 언어형식 언어 참조


2. 정규 표현식의 역사 및 구현 엔진

  ㅇ 역사
     - 1950년대 : 스티븐 클레이니(Stephen Kleene), `정규 집합` 수학모델 창시
     - 1960,1970년대 : 케네스 톰슨(Kenneth Thompson), 정규표현식 적용 논문 발표 및 구현
     - 1990년대 : 필립 헤이즐, 정규표현식 라이브러리 PCRE 개발

  ㅇ 구현 엔진 구분
     - DFA (Deterministic Finite Automaton, 결정적 유한 오토마타)
        . 단순하고 빠른 매칭이 필요한 경우에 적합
        . 例) GNU grep, Google RE2 등 
     - NFA (Non Deterministic Finite Automaton, 비 결정적 유한 오토마타)
        . 복잡한 패턴 매칭과 고급 기능이 필요한 경우에 적합
        . 例) PCRE (Perl Compatible Regular Expression), vim (Vi IMproved), 파이썬 모듈 re 등
           .. vim : 유닉스/리눅스 환경 하의 텍스트편집기인 vi를 개선한 버전으로,
                    읽기 중심으로 편집,검색,명령 4개 작업 모드로써 동작함


3. 정규 표현식의 응용 및 단점문자열 처리/조작 기술에 가장 많이 쓰여짐
     - 문자열 패턴을 간단한 식으로 표현 가능
        . 즉, 반복문,조건문 없이도, 문자열 패턴을 정의하고 테스트할 수 있음
     - 문자열 조작/처리에 응용하는 강력한 도구로 쓰임
        . 많은 프로그래밍 언어 및 도구에서 지원되며, 텍스트 처리 작업의 효율적 수행 가능
        . 例) 특정 문자열검색, 일치, 추출, 삭제, 치환(대체) 등

  ㅇ 다만, 복잡한 패턴 작성시 가독성이 떨어질 수 있으므로,
     - 패턴설계,유지보수할 때는, 주석을 달거나, 
     - 복잡한 경우에는, 여러 개의 간단한 패턴으로 나누어 작성하는 것이 좋음


4. 정규 표현식의 기본 규칙

  ㅇ (연산)
     -  기본 연산 셋 : 연접, 반복, 선택                              ☞ 아래 5.항 참조

  ㅇ (기호)
     - (순수 문자)  리터럴 : `문자,숫자` 등 그 자체
     - (특수 문자)  패턴 기호 : 기본 연산에 추가적인 `메타 문자`          ☞ 아래 6.항 참조

  ㅇ (표시)  
     - 대부분의 정규 표현식은 슬래시(/)로 감싸짐


5. 정규 표현식의 기본 연산

  ※ 정규표현식 내 조합해서 패턴을 만드는 기본 연산연접 (Concatenation) 
     - 별도의 특별한 기호는 없고, 단지 붙여쓰기 만 하면 됨

  ㅇ 반복 (Repetition) 
     - 반복을 나타내는 수량자 :  *, +, ?, {}

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

  ※ 연산 결합 우선순위 : 반복 > 연접 > 선택
     - 한편, 우선순위의 명시적 재지정을, 그룹화 기호 `( )`에 의해 할 수 있음
  

6. 정규 표현식메타 문자 (특수 문자 기호)

  ㅇ 위 기본 연산 셋(3)에 추가시켜, 
     - 쉽게 쓸 수 있도록 만들어진 패턴 기호 : 메타 문자 

  ㅇ 비록, 
     - 정규 표현식이, 기본 연산 셋(3) 만으로도 표현 가능하지만,
     - 정규 표현식메타문자는, 특별한 의미를 갖는 문자들로써, 
        . 프로그래머 관점으로, 정규표현식을 보다 쉽게 표현할 수 있는 방법임

  ※ ☞ 정규표현 메타 문자 참조
     - 선택  :  `|`  (OR, 선택)
     - 문자 클래스  :  `[ ]`  (특정한 한 문자를 나타냄)
     - 서브 패턴/그룹화  :  `( )`   ☞ 메타문자 그룹화 참조 (부분 문자열로 감싸서 다양하게 활용) 
     - 수량자 (Quantifier)  :  `*, +, ?, { }`   ☞ 메타문자 수량자 참조 (직전 문자들의 반복 횟수)
     - 위치 고정 앵커  :  `^, $`, 특정 용도 앵커 `\`, 임의 한 문자 `.`   ☞ 메타문자 앵커 참조
     - 수정자 (Modifier)  :  `g, i, m, s`, 이스케이프 `\` 등


7. 정규 표현식의 기초 활용

  ※ ☞ 정규표현식 활용 기초 참조
     - 문자열 부위의 위치 구분, 문자열 일치의 종류, 캡처와 치환 등


8. 정규 표현식의 例

  ㅇ 정규 표현식의 활용 例  ☞ 정규표현식 예 참조

  ㅇ 정규 표현식의 테스트용 사이트
     - 자바스크립트 지원  :  regexr.com 등
     - PCRE/자바스크립트/파이썬 지원  :  regex101.com, debuggex.com

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


"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"