Regular Expression(정규 표현식)은 줄여서 REGEX(레젝스)
라고 부르기도 한다.
특정한 패턴의 문자열을 검색
하고 필요하면 편집
하기 위해 사용한다.
정규 표현식은 다음과 같이 분류할 수 있다.
- POSIX Regular Expression (UNIX 계열 표준 정규 표현식)
- BRE (Basic Regular Expression)
- ERE (Extended Regular Expression)
- BRE에 추가적인 메타 문자 등을 제공
- PCRE (Perl Compatible Regular Expression)
?
, +
, {}
등의 메타 문자는 ERE
에서만 사용 가능하다.
Meta character (메타 문자) a.k.a Wild card character
IT용어사전에서 정의하고 있는 메타 문자의 사전적인 의미는 다음과 같다.
정규 표현식에서의 메타 문자는
다른 문자의 정보를 운반하기 위해 프로그램 소스나 데이터에 끼워 넣는 문자.
예를 들면 C언어 프로그램에 사용된 백슬레시가 그 예인데, 이 문자 다음에 오는 문장은 확장 문자열(escape sequence)에 속하는 부분으로서 주변 장치와 프로그램에 대해서 어떤 명령을 수행하도록 하는 제어 문자로 사용된다.
[네이버 지식백과]
메타 문자 | 설 명 | 비 고 |
---|---|---|
. | 모든 문자 | |
| | 왼쪽 또는 오른쪽과 일치 | cat|dog |
[] | 문자 집합 중 하나와 일치 | [a-z]면 a-z 중 하나 |
[^] | 문자 집합을 제외하고 일치 | [^a-z]면 a-z가 아닌 것 중 하나 |
* | 문자가 0개 이상 반복될 때 | |
+ | 문자가 1개 이상 반복될 때 | |
{n} | 문자가 n번 반복될 때 | a{3} |
{m, n} | 문자가 m번 이상 n번 이하 반복될 때 | |
{n,} | 문자가 n번 이상 반복될 때 | |
\ | Escape | |
[\b] | Back space | |
\f | Form Feed | |
\n | Line Feed | |
\r | Carrige Return | |
\t | Tab | |
\v | Vertical Tab | |
\d | 0~9 사이의 숫자 하나 | [0-9] |
\D | 숫자를 제외한 문자 하나 | [^0-9] |
\w | 대소문자와 밑줄을 포함하는 모든 영숫자 | [a-zA-Z0-9] |
\W | 영숫자가 아니거나 밑줄이 아닌 모든 문자 | [^a-zA-Z0-9] |
\s | 모든 공백 문자 | [\f\n\r\t\v] |
\S | 공백 문자가 아닌 모든 문자 | [^\f\n\r\t\v] |
\x | 16진수 표현 | \x0A (=ascii 10 == \n) |
\0 | 8진수 표현 | \011 (=ascii 9 == \t) |
\c | 제어문자 | \cZ (Ctrl+Z) |
^, \A | 문자열의 시작 ([] 밖에 있을 때) | |
$, \Z | 문자열의 끝 | |
\< | 단어의 시작과 일치 | |
\> | 단어의 끝과 일치 | |
\b | 단어 경계와 일치 | |
\B | 단어 경계가 아닐 때 일치 | |
() | group 또는 back reference를 정의한다. | |
?= | 전방탐색 | |
?<= | 후방탐색 | |
?! | 부정형 전방탐색 | |
?<! | 부정형 후방탐색 | |
\l | 다음에 오는 글자를 소문자로 변환 | |
\L | \E를 만날 때까지 모든 문자를 소문자로 변환 | |
\u | 다음에 오는 글자를 대문자로 변환 | |
\U | \E를 만날 때까지 모든 문자를 대문자로 변환 | |
\E | \L 또는 \U 의 End point |
줄 바꿈
- Windows: \r\n
- UNIX, LINUX: \n
읽는 법
- !: Exclamation point
- “: Quotation mark
- ‘: Apostrophe
- `: Grave
- .: Period
- ^: Caret
- *: Asterisk
- -: Hyphen
- _: Underscore
- ~: Tilde
- &: Ampersand
- (): Parenthesis
- {}: Brace
- []: Bracket
- <>: Chevron
Back reference
- 매칭된 결과를 다시 사용하는 패턴
()
로 묶인 패턴 매칭을\#
형태로 재사용할 수 있다.#
은 숫자.- \1, \2, \3 …
- ex.
(a) = \1
의 매칭 결과는a = a
가 된다.
- HTML Tag를 parsing할 때 굉장히 효율적이다.
- ex.
<(table)>[.]*<\/\1>
- ex.
REGEX in JAVA
JAVA에서 정규 표현식을 사용하여 Pattern을 찾기 위해서는 아래와 같이 코드를 사용한다.
|
|
위 코드의 수행 결과는 다음과 같다.
|
|
위 코드에서 일치하는 다음 문장을 찾기 위해서는 m.find()
를 한 번 더 수행하면 다음 매칭되는 문장을 찾는다.
Pattern Class 및 Matcher Class에 대한 자세한 정보는 JavaDoc (Pattern, Matcher)을 참조하자.
Tip
https://regexper.com 라는 웹사이트에서 정규 표현식을 시각적으로 확인할 수 있게 도와주고 있다. 개인적으로 짱짱맨 사이트라고 생각한다.
JavaScript에 대한 정규표현식 사용은 Mozilla 사이트에서 잘 설명하고 있다.
예시 1
Regexper 결과 1
출처
아래의 글들을 교재삼아 작성하였습니다.