정규 표현식
정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp[1] 또는 regex, rational expression)[2][3] 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원. [wiki]
패턴
정규 표현식이라는 문구는 일치하는 텍스트가 준수해야 하는 "패턴"을 표현하기 위해 특정한 표준의 텍스트 신택스를 의미하기 위해 사용된다. 정규 표현식의 각 문자(즉, 패턴을 기술하는 문자열 안의 각 문자)는 메타문자(특별한 의미로)로 이해되거나 정규 문자('문자 그대로', 즉 '리터럴'의 의미로)로 이해된다. [wiki]
. ^ $ * + ? { } [ ] \ | ( ) |
▪ '|' (or)
ㆍ 패턴으로 등록된 항목에 대해서 or 조건을 적용
- 예) zigi|space 는 'zigi' 혹은 'space' 조건에 대해서 매치
▪ '( )' (scope, priority)
ㆍ여러 개의 정규 표현식을 하나의 표현식으로 구성
ㆍ 패턴의 적용 범위와 패턴에서 사용되는 연산자의 우선순위
- 예) AB(C|D)EF 는 ABCEF와 ABDEF 에 대해서 매치
▪ '?' (0 or 1)
ㆍ 1회 매치가 되거나 매치되지 않는 경우
- zig?i 는 zigi (1회 매치) 혹은 zig (0회 매치) zigii(2회 매치로 false)
▪ '*'
ㆍ 0회 이상의 매치
- zig*i 는 zig 부터 zigi , zigii, zigiiii, zigiiiiii 모두 매치
▪ '+'
ㆍ1회 이상의 매치
- zig+i 는 zigi , zigii, zigiiii, zigiiiiii 모두 매치되지만, zig는 매치되지 않음
▪ '{n}'
ㆍ n번 만큼 매치. 정확하게 n번만큼만 매치.
▪ '{min,}'
ㆍ min 번 이상만큼 매치
▪ '{min,max}'
ㆍ min번 ~ max만큼 매치
▪ 문자 클래스 [ ]
ㆍ [ ] 사이의 문자들과 매치
ㆍ [ ] 사이의 '-'을 사용하면 해당 문자의 범위 지점
- 예) [ a1A ]로 선언 시에, 'a', '1', 'A' 중의 한 개의 문자와 매치
- 예) [ a-c ] 논 선언 시에, 'a', 'b', 'c' 중의 한 개의 문자와 매치
ㆍ [ ] 사이의 ^ 메타 문자는 not의 의미를 갖음.
- 예) [^a-z]는 소문자는 제외하고 매치
▪ 주요 문자 클래스 [ ]
ㆍ 자주 사용되는 문자 클래스는 사전 정의된 별도 표기법으로 대체 가능
- \d : 숫자 [0-9]
- \D : 숫자가 아닌 것 [^0-9]
- \s : 공백문자(whitespace) 문자 [ \t\r\n\v\f]
- \S : 공백문자(whitespace) 문자가 아닌 것
- \w : 영숫자 [a-zA-Z0-9]
- \W : 영수자가 아닌 것 ※ 대문자는 소문자에 '^'를 사용하여 not 의미로 사용하는 것과 동일
.
메타문자 | 기능 | 설명 |
---|---|---|
. | 문자 | 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"는 포함하지 않는다. |
※ 참고
- 위키피디아 (https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D)
- 점프투파이썬 (https://wikidocs.net/4308)