정규 표현식(Regular expression, 줄여서 Regexp 또는 Regex)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식 구현을 내장하고 있다.
정규 표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다. 이 중 표준화된 것으로는 POSIX의 확장 정규 표현식이 있으며, 표준화되지는 않았지만 펄의 정규 표현식과 그 대체 구현인 PCRE도 널리 사용된다.
문법
몇몇 문자는 특정한 논리적 관계를 나타내는 기호로 쓰인다. 이를 제외한 나머지 문자는 일반적인 문자를 나타낸다.
- 선택 기호: "|" 기호는 여러 식 중에서 하나를 선택한다. 예를 들어, "abc|adc"는 abc라는 문자열과 adc라는 문자열을 모두 포함한다.
- 묶기 기호: "("와 ")"로 여러 식을 하나로 묶을 수 있다. "abc|adc"와 "a(b|d)c"는 같은 의미를 가진다.
- 개수 기호: 문자 뒤에 붙어 문자의 개수를 나타낸다.
- "*" : 0개 이상. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
- "+" : 1개 이상. "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.
- "?" : 0개 또는 1개. "a?b"는 "b", "ab"를 포함한다.
- "{m, n}" : m개 이상 n개 이하. "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다.
이에 따라 "(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]는 알파벳 소문자로 시작하지 않는 모든 문자를 나타낸다.
- "^", "$" : 각각 문자열의 처음과 끝을 나타낸다.
바깥 고리
원문 :
http://enc.daum.net/dic100/contents.do?query1=10XXX74388C#이나 Java 데모코드 있으신분 트랙백이나 링크, 댓글 부탁드립니다.