정규표현식(Regular Expression)이란 특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 형식언어입니다. 컴퓨터 과학의 정규언어로부터 유래했으며 정규표현식은 줄여서 정규식, Regex, Regexp 등으로 불립니다. 정규식을 사용하면 문자열에서 특정 문자를 교체하거나, 삭제하는 등 문자열을 원하는 형태로 편집할 수 있습니다. 예를 들어서 전화번호나 주민등록번호, 이메일 등과 같이 지켜져야 하는 특정한 형식을 가지고 있는 데이터의 입력값을 검증 해야하는 경우 사용하면 간편하게 처리할 수 있습니다.
(1) 전화번호
\d{2,3}-\d{3,4}-\d{4}
(2) 이메일
^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$
정규식 | 설명 |
---|---|
[abc] | a, b, c중 하나이면 일치 합니다. |
[^abc] | a, b, c를 제외한 다른 글자 이면 일치합니다. |
[a-zA-Z] | a 부터 z까지의 소문자 알파벳 이거나 A 부터 Z까지의 대문자 알파벳 중의 하나라면 일치합니다.(범위) |
[a-d[m-p]] | a 부터 d까지, 또는 m 부터 p까지 중에 하나와 일치합니다: a-dm-p |
[a-z&&[def]] | d, e, f 중의 하나와 일치합니다. (교집합) |
[a-z&&[^bc]] | b와 c를 제외한 a 부터 z까지 중의 하나와 일치합니다: ad-z |
[a-z&&[^m-p]] | m부터 p 까지를 제외한, a 부터 z까지 중의 하나와 일치합니다: a-lq-z |
정규식 | 설명 |
---|---|
. | 임의의 문자 (라인 종결자와 일치할 수도 하지 않을 수도 있음) |
\d | 숫자 문자: [0-9] |
\D | 숫자 문자가 아닌것: [^0-9] |
\s | 화이트 스페이스 문자: [ \t\n\x0B\f\r] |
\S | 화이트 스페이스 문자가 아닌것: [^\s] |
\w | 알파벳 단어 문자(word 문자): [a-zA-Z_0-9] |
\W | 알파벳 단어 문자가 아닌것: [^\w] |
Greedy | Reluctant | Possessive | 의미 |
---|---|---|---|
X? | X?? | X?+ | X가 없거나 한번 나옴 |
X* | X*? | X*+ | X가 없거나 한번 이상 나옴 |
X+ | X+? | X++ | X가 한번 또는 여러번 나옴 |
X{n} | X{n}? | X{n}+ | X가 정확히 n번 나옴 |
X{n,} | X{n,}? | X{n,}+ | X가 n번 이상 나옴 |
X{n,m} | X{n,m}? | X{n,m}+ | X가 n이상 m이하로 나옴 |
Greedy : 매칭을 위해서 입력된 문자열 전체를 읽어서 확인하고 뒤에서 한자씩 빼면서 끝까지 확인합니다.
Reluctant : 입력된 문자열에서 한글자씩 확인해 나갑니다. 마지막에 확인하는 것은 전체 문자열 입니다.
Possessive : 입력된 전체 문자열을 확인합니다. Greedy와 달리 뒤에서 빼면서 확인하지 않습니다.
정규식 | 설명 |
---|---|
^ | 행의 시작 |
$ | 행의 끝 |
\b | 단어 경계 |
\B | 단어가 아닌것의 경계 |
\A | 입력의 시작 부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
플래그 | 동등한 내장 표현 | 설명 |
---|---|---|
Pattern.CANON_EQ | None | 표준화된 매칭 모드를 활성화합니다. 이 모드가 켜지면 a를 나타내는 유니코드 "\u00E5"와 a와 상단고리 유니코드를 쓴 "a\u030A"를 같다고 매칭합니다. |
Pattern.CASE_INSENSITIVE | (?i) | 대소문자를 구분하지 않습니다. |
Pattern.COMMENTS | (?x) | 공백과 주석이 무시됩니다. 주석은 #부터 그 행 끝까지 입니다. |
Pattern.MULTILINE | (?m) | 다중행 모드를 사용여 모든 ^와 $가 인식됩니다. 기본값은 입력값 전체를 하나의 시작과 끝으로 인식합니다. |
Pattern.DOTALL | (?s) | .가 개행문자 까지 포함하는 모든 문자로 매칭됩니다. |
Pattern.LITERAL | None | 입력의 메타문자와 이스케이프된 문자를 일반 문자로 취급합니다. CASE_INSENSITIVE와 UNICODE_CASE는 기능이 유지됩니다. |
Pattern.UNICODE_CASE | (?u) | 이 모드가 활성화 되면 대소문자 매칭이 유니코드 표준을 따릅니다. 기본은 US-ASCII 문자 집합을 따릅니다. |
Pattern.UNIX_LINES | (?d) | ^와 $를 처리시 UNIX 개행을 사용합니다. |
참고