텍스트에 반복적으로 포함되어 있는 특정 패턴을 수식화한 것. 수식을 이용하여 특정 패턴을 쉽게 찾아낼 수 있다.
예를 들면 주민등록번호가 저장되어 있는 위치를 번호와 상관없이 찾을 수 있다.
수정 역시 가능하다.
많은 텍스트 편집기 및 개발 도구에서 정규표현식을 지원한다.
정규표현식은 프로그래밍 뿐만 아니라 많은 검색과 관련된 분야에서 사용될 수 있으나 프로그래밍에서 많이 쓰이므로 programming 카테고리 안에 포함시켰다.
사용 환경 : Windows 7, Ubuntu 13.10
위 문장에서 13.10, 즉 ##.## 형식의 문자를 찾으려면 아래와 같은 정규 표현식으로 찾으면 된다.
[0-9][0-9]\.[0-9][0-9]
어떤 범주에 속하는 문자 하나를 표현할 때 [ ] 를 이용하여 표현하는 것을 문자 클래스라고 한다. 아래와 같은 것이 가능하다.
표현식 | 의미 |
---|---|
[0-9] | 한자리 숫자 |
[a-z] | 한자리 소문자 |
[A-Z] | 한자리 대문자 |
[a-zA-Z] | 한자리 대문자 또는 소문자 |
[a-c] | a ~ c 사이의 소문자 |
여러 개를 쓰는 경우 쉼표(,)로 구분할 수도 있는 것 같다. (예: [a-z,A-Z])
괄호 기호 ( ) 를 이용하면 괄호 안의 내용을 기억해 추후 치환할 때 써먹을 수 있다. 괄호 안의 내용은 괄호가 나타난 순서대로 1, 2, 3, … 순으로 번호가 매겨진다. 예를 들면 다음과 같다.
내용 : a1 b3 c45 찾기 : ([a-z])([0-9])([0-9]) 바꾸기 : \1\3 결과 : a1 b3 c5
위 과정 중 찾기를 하면 c45라는 문자를 찾고 c가 1번째 괄호, 4가 2번째 괄호, 5가 3번째 괄호에 저장된다. 그리고 \1\3으로 바꾸기를 하였으므로 1, 3번째 문자인 c와 5만 남게 된다. 만약 \3\2로 바꾸기를 한다면 54로 바뀌어질 것이다.
016-902-2891 011-492-1914 018-392-4195
전화번호의 맨 앞 세자리를 010으로 통합하려면?
찾기) [0-9][0-9][0-9]-([0-9][0-9][0-9])-([0-9][0-9][0-9][0-9]) 바꾸기) 010-\1-\2
결과는 텍스트 편집기로 확인한다.
관련 문법 내용 | 기 호 | 의 미 |
---|---|---|
기본 메타 문자 | . | 모든 문자와 일치 (한 문자) |
|(버티컬 바) | 왼쪽 혹은 오른쪽과 일치 | |
[^] | 문자 집합 구성원 중 하나와 일치 | |
- | 문자 집합 구성원을 제외하고 일치 | |
\ | 다음에 오는 문자를 이스케이프 | |
수량자 | * | 문자가 없는 경우나 하나 이상 연속하는 문자 찾기 |
*? | 게으른 * 문자 | |
+ | 문자 하나 이상 찾기 | |
+? | 게으른 + 문자 | |
? | 문자가 없거나 하나인 문자 찾기 | |
{n} | 정확히 요소와 n번 일치 | |
{m, n} | 요소와 m에서 n번 일치 | |
{n, } | 요소와 n번 이상 일치 | |
{n, }? | 게으른 {n, } | |
위치 지정 | ^ | 문자열의 시작과 일치 |
\A | 문자열의 시작과 일치 | |
$ | 문자열의 끝과 일치 | |
\Z | 문자열의 끝과 일치 | |
\< | 단어의 시작과 일치 | |
\> | 단어의 끝과 일치 | |
\b | 단어의 경계와 일치 | |
\B | \b와 반대로 일치 | |
특수한 문자 | [\b] | 역 스페이스 |
\c | 제어문자와 일치 | |
\d | 모든 숫자와 일치 | |
\D | /d와 반대 | |
\f | 페이지 넘기기 (form feed) | |
\n | 줄바꿈 | |
\r | 캐리지 리턴 | |
\s | 공백 문자와 일치 | |
\S | \s와 반대로 일치 | |
\t | 탭 | |
\v | 수직 탭 | |
\w | 영숫자 문자나 밑줄과 일치 | |
\W | \w와 반대로 일치 | |
\x | 16진수 숫자와 일치 | |
\0 (숫자) | 8진수 숫자와 일치 | |
역참조와 전후방 탐색 | ( ) | 하위 표현식 정의 |
\1(숫자) | 첫번째 일치한 하위 표현식, 두번째로 일치한 하위 표현식은 \2로 표기하는 방식 |
|
?= | 전방탐색 | |
?⇐ | 후방탐색 | |
?! | 부정형 전방탐색 | |
?<! | 부정형 후방탐색 | |
?(backreference)true | 조건 지정 | |
?(backreference)true|false | else 표현식 조건 지정 | |
대소문자 변환 | \E | \L 혹은 \U 변환을 끝냄 |
\I | 다음에 오는 글자를 소문자로 변환 | |
\L | \E를 만날 때까지 모든 문자를 소문자로 변환 | |
\u | 다음에 오는 글자를 대문자로 변환 | |
\U | \E를 만날 때까지 모든 문자를 대문자로 변환 | |
변경자 | (?m) | 다중행 모드 |