본문 바로가기
끝나지 않는 개발스터디

정규표현식(Regular expression/regexp/regex)

by 행복한집사 2024. 3. 6.

정규표현식이란?

  • Stephen Cole Kleene이 만든 정규언어로부터 유래
  • 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
  • 기본 제공 개념
    • Boolean "Or"
      • |  → gray|grey 는 gray 또는 grey와 매칭 됨
    • 그룹핑
      • ()  → gray|grey 를 gr(a|e)y처럼 사용도 가능함
    • 수량자
      • ? → 0부터 1차례까지 발생
      • * → 0번 이상의 발생
      • + → 1번 이상의 발생
      • {n} → 정확히 n번만큼 일치시킴
      • {min,} → min번 이상만큼 일치시킴
      • {min, max} → 적어도 min번만큼 일치시키고 max번을 초과하여 일치시키지는 않음
  • 언어마다 다르지만 POSIX 표준 규칙이 적용되어 있음
    • POSIX Basic Regular Expressions (BRE)
      메타문자 기능 설명
      . 문자 1개의 문자와 일치한다. 단일행 모드에서는 줄바꿈문자를 제외한다.
      [ ] 문자 클래스 "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다.
      [^ ] 부정 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다.
      ^ 처음 문자열이나 행의 처음을 의미한다.
      $ 문자열이나 행의 끝을 의미한다.
      ( ) 하위식 여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다.
      \n 일치하는 n번째 패턴 일치하는 패턴들 중 n번째를 선택하며, 여기에서 n은 1에서 9 중 하나가 올 수 있다.
      * 0회 이상 0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
      {m, n} m회 이상 n회 이하 "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다.
    • POSIX Extended Regular Expressions (ERE)
      메타문자 기능 설명
      ? 0 또는 1회 "a?b"는 "b", "ab"를 포함한다.
      + 1회 이상 "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.
      ¦ 선택 여러 식 중에서 하나를 선택한다. 예를 들어, "abc¦adc"는 abc와 adc 문자열을 모두 포함한다.
    • 문자클래스
POSIX vim ASCII 설명
[:alnum:]   [A-Za-z0-9] 영숫자
  \w [A-Za-z0-9_] 영숫자 + "_"
  \W [^A-Za-z0-9_] 낱말이 아닌 문자
[:blank:]   [ \t] 공백과 탭

 

  • 참고로 위에서 사용하는 메타문자 자체를 찾고 싶을 때는 escape 해서 찾을 수 있음
  • 연습 사이트: https://regexr.com/

참고: https://en.wikipedia.org/wiki/Regular_expression
https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

'끝나지 않는 개발스터디' 카테고리의 다른 글

OCR을 이용해보자  (0) 2024.04.02
네트워크 장비 정리  (0) 2024.03.21
파일 구조(File structure)  (0) 2024.03.02
암호화 알고리즘  (0) 2024.02.29
압축(손실압축, 비손실 압축)  (0) 2024.02.25

댓글