Regular Expression   정규 표현식

(2025-05-11)

1. 정규 표현식 이란?

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

  ㅇ 정규 표현식 (Regular Expression)
     - 1 이상의 문자 또는 기호를 조합한, 문자열 축약 표현식(패턴)
        . 문자열패턴을 기술하는 표현식
           .. (패턴 : 일정한 규칙을 갖는 문자열 집합)
        . 일정 패턴을 갖는 문자열 집합

  ㅇ 정규 언어 (Regular Language)
     - 정규 표현식으로 형식화된 언어형식 언어 참조


2. 정규 표현식의 역사

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


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

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


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

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

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

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


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

  ※ 정규 표현식패턴은, 아래 3가지 연산으로 조합 가능

  ㅇ 연접 (Concatenation) 
     - 별도의 특별한 기호 없음, 단순히 나열 만 하면 됨
        . 例) abc  =>  'a' 다음에 'b', 그 다음에 'c'가 순서대로 오는 문자열

  ㅇ 반복 (Repetition) 
     - 수량자(Quantifier)를 통해 지정  :  *, +, ?, {}

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

  ※ 연산자 우선순위
     - 기본 우선순위  :  반복 > 연접 > 선택
     - 우선순위 명시  :  괄호 ( )를 사용해, 우선순위 명시적 재지정 가능
        . 例) a(b|c)d  =>  "abd" 또는 "acd"
           .. 만약 괄호가 없었다면?  ab|cd  =>  'ab' 또는 'cd' 와 일치 
           .. 왜냐하면, | 는 선택이고, 연접보다 우선순위가 낮기 때문


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

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

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

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


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

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


8. 정규 표현식의 例

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

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


9. 정규 표현식의 구현 엔진DFA (Deterministic Finite Automaton, 결정적 유한 오토마타)
     - 단순하고 빠른 매칭이 필요한 경우에 적합
        . 例) GNU grep, Google RE2 등 

  ㅇ NFA (Non Deterministic Finite Automaton, 비 결정적 유한 오토마타)
     - 복잡한 패턴 매칭과 고급 기능이 필요한 경우에 적합
        . 例) PCRE (Perl Compatible Regular Expression), vim (Vi IMproved), 파이썬 모듈 re 등

정규표현식
1. 정규 표현식   2. 메타 문자   3. 메타문자 수량자   4. 메타문자 그룹화   5. 메타문자 앵커   6. 정규표현식 활용 기초   7. 정규표현식 예  
용어해설 종합 (단일 페이지 형태)

"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"
     [정보통신기술용어해설]          편집 이력          소액 후원