정규 표현식 (regexp, regular expression)

아현·2022년 3월 18일
0

Computer Science

목록 보기
30/47
post-thumbnail

참조, 참조2

1. 정규 표현식이란?



  • 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

  • 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다.

    • 현재 많은 프로그래밍 언어, 텍스트 처리 프로그램, 고급 텍스트 편집기 등이 정규 표현식 기능을 제공한다. 일부는 펄, 자바스크립트, 루비, Tcl처럼 문법에 내장되어 있는 반면 닷넷 언어, 자바, 파이썬, POSIX C, C++ (C++11 이후)에서는 표준 라이브러리를 통해 제공한다. 그 밖의 대부분의 언어들은 별도의 라이브러리를 통해 정규 표현식을 제공한다.



패턴


  • 정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다.

  • 정규 표현식의 각 문자(즉, 패턴을 기술하는 문자열 안의 각 문자)는 메타 문자로 이해되거나 정규 문자('문자 그대로', 즉 '리터럴'의 의미로)로 이해된다.

    • 정규식 a.

      • a는 단지 'a'와 일치하는 리터럴 문자

      • .는 새 줄을 제외한 모든 문자와 일치시키는 메타 문자이다.

      • 이 정규식은 이를테면 a, ax, a0과 일치시킬 수 있다.


  • 패턴 일치는 정확히 동일한 일치에서부터 매우 포괄적인 유사 일치에 이르기까지 다양하다.

    • .는 매우 포괄적인 패턴

    • [a-z]('a'부터 'z'까지의 모든 문자 일치)는 덜 포괄적

    • a는 정확한 패턴(단지 'a'만 일치)이다.

메타문자 문법은 다양한 입력 데이터의 텍스트 처리의 자동화를 지시하는 정확하고 유연한 방법을 통해 표준 ASCII 자판을 사용하여 입력하기 쉬운 형태로, 미리 기술된 대상을 표현하기 위해 설계되었다.



2. 기본 개념


  • 패턴(pattern)으로 부르는 정규 표현식은 특정 목적을 위해 필요한 문자열 집합을 지정하기 위해 쓰이는 식이다.

  • 문자열의 유한 집합을 지정하는 단순한 방법은 문자열의 요소나 멤버를 나열하는 것이다.

    • 그러나 문자열의 원하는 집합을 지정하기 위해 사용할 수 있는 더 간결한 방법들이 있다.

    • 3개의 문자열 Handel, Händel, Haendel을 포함하는 집합은 패턴 H(ä|ae?)ndel으로 지정이 가능

      • 이러한 패턴은 3개의 문자열을 각각 일치(match)시킨다고 이야기한다.



불리언 - |


  • 수직선은 여러 항목 중 선택을 하기 위해 구분한다.

  • gray|grey"gray" 또는 "grey"와 일치한다.



그룹 묶기 - ( )


  • 괄호를 사용하면 연산자의 범위와 우선권을 정의할 수 있다.

  • gray|greygr(a|e)y"gray""grey" 집합을 둘 다 기술하는 동일 패턴이다.



양의 지정


  • ?

    • 물음표는 0번 또는 1차례까지의 발생을 의미한다.

    • colou?r"color""colour"를 둘 다 일치시킨다.

  • *

    • 별표는 0번 이상의 발생을 의미한다.

    • ab*c"ac", "abc", "abbc", "abbbc" 등을 일치시킨다.

  • +

    • 덧셈 기호는 1번 이상의 발생을 의미한다.

    • ab+c"abc", "abbc", "abbbc" 등을 일치시키지만 "ac"는 일치시키지 않는다.

  • {n}[6]

    • 정확히 n 번만큼 일치시킨다.
  • {min,}[6]

    • "min"번 이상만큼 일치시킨다.
  • {min,max}[6]

    • 적어도 "min"번만큼 일치시키지만 "max"번을 초과하여 일치시키지는 않는다.



3. 문법


  • 정규 표현식의 패턴은 대상 문자열과 일치시킨다.

    • 이 패턴은 일련의 원자로 구성된다.
  • 하나의 원자는 정규 표현식 패턴 안의 하나의 점이며, 대상 문자열과 일치시키기 위해 존재한다.

  • 가장 단순한 형태의 원자는 리터럴(literal)이지만 원자를 일치시키기 위해 패턴을 묶을 때에는 메타문자로서 ( )를 사용해야 한다.


  • 메타문자

    • 수량자(quantifier)

      • 원자 외에도 얼마나 많은 원자가 있는지를 가리킨다.
    • 논리적 OR 문자

      • 선택적인 대안을 가리킨다.
    • NOT 문자

      • 원자의 존재를 부정
    • 역참조(backreference)

      • 전에 일치된 원자를 참조할 수 있게 한다.



구분 문자


  • 프로그래밍 언어에서 정규 표현식을 입력할 때, 통상적인 문자열 리터럴로 표현할 수 있으므로 일반적으로 인용 부호로 처리된다.

    • C, 자바, 파이썬에서는, 정규표현식 re는 re로 입력된다.

    • 구분 문자로 슬래시를 사용하는 경우도 있는데 정규 표현식 re에 대해서 /re/를 사용하는 식이다.

      • 이는 ed라는 편집기에서 기원하며, /는 검색을 위한 편집기 명령어이고, /re/라는 식은 특정한 범위의 줄들을 지정하는데 사용할 수 있다.

      • 비슷한 방식이 sed에서 사용되는데, 검색 후 치환은 s/re/replacement/를 사용

      • 패턴은 /re1/,/re2/처럼 특정한 범위의 줄을 지정하여 쉼표(,)로 결합할 수 있다.

        • 이러한 표기법은 특히 펄에서도 사용된다.



4. 표준




Flag




5. 연습 사이트




profile
For the sake of someone who studies computer science

0개의 댓글