정규 표현식

위키백과 ― 우리 모두의 백과사전.

정규 표현식(Regular expression, 줄여서 Regexp 또는 Regex)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 과 Tcl은 언어 자체에 강력한 정규 표현식 구현을 내장하고 있다.

정규 표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다. 이 중 표준화된 것으로는 POSIX의 확장 정규 표현식이 있으며, 표준화되지는 않았지만 펄의 정규 표현식과 그 대체 구현인 PCRE도 널리 사용된다.

[편집] 문법

몇몇 문자는 특정한 논리적 관계를 나타내는 기호로 쓰인다. 이를 제외한 나머지 문자는 일반적인 문자를 나타낸다.

  • 선택 기호: "|" 기호는 여러 식 중에서 하나를 선택한다. 예를 들어, "abc|adc"는 abc라는 문자열과 adc라는 문자열을 모두 포함한다.
  • 묶기 기호: "("와 ")"로 여러 식을 하나로 묶을 수 있다. "abc|adc"와 "a(b|d)c"는 같은 의미를 가진다.
  • 갯수 기호: 문자 뒤에 붙어 문자의 갯수를 나타낸다.
    • "*" : 0개 이상. "a*b"는 "ab", "aab", "aaab", "b"를 포함한다.
    • "+" : 1개 이상. "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.
    • "?" : 0개 또는 1개. "a?b"는 "ab", "b"만을 포함한다.

이에 따라 "(fa|mo|br?o)ther"는 "father", "mother", "brother", "bother"를 나타낸다.

많은 프로그래밍 언어에서는 이를 확장한 문법을 가지고 있다. 이 중 일반적으로 사용되는 연산자는 다음과 같다.

  • "[]" : "["과 "]" 사이의 문자 중 하나를 선택한다. "|"를 여러 개 쓴 것과 같은 의미를 가진다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 문자의 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 뜻한다.
  • "[^]" : "[^"과 "]" 사이의 문자를 제외한 나머지 하나를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 나타낸다.
  • "^", "$" : 각각 문자열의 처음과 끝을 나타낸다.

[편집] 바깥 고리