정규 표현식(Regular Expression)
**정규 표현식(Regular Expression, RegEx)**은 문자열의 패턴을 정의하는 방법으로, 문자열을 검색, 추출, 치환하는 데 사용됩니다. 정규 표현식은 자바의 java.util.regex 패키지를 통해 사용할 수 있습니다. 이 패키지는 두 개의 주요 클래스인 Pattern과 Matcher를 제공하며, 이를 통해 패턴 매칭 작업을 수행합니다.
메타 문자 | 설명 | 예시 | 설명 |
. | 임의의 단일 문자 (\n 제외) | a.b | a, 임의의 단일 문자, b와 매칭 |
^ | 문자열의 시작을 나타냄 | ^abc | abc로 시작하는 문자열과 매칭 |
$ | 문자열의 끝을 나타냄 | xyz$ | xyz로 끝나는 문자열과 매칭 |
* | 0개 이상의 문자가 반복됨 | ab* | a 뒤에 b가 0개 이상 있는 경우와 매칭 |
+ | 1개 이상의 문자가 반복됨 | cd+ | c 뒤에 d가 1개 이상 있는 경우와 매칭 |
? | 문자가 0개 또는 1개 있을 때 매칭 | ef? | e 뒤에 f가 있을 수도, 없을 수도 있는 경우 |
[ ] | 대괄호 안에 있는 문자 집합 중 하나와 매칭 | [ghi] | g 또는 h 또는 i 중 하나와 매칭 |
| | 문자열 또는 패턴을 OR 조건으로 매칭 | app|bar | app 또는 bar 중 하나와 매칭 |
( ) | 그룹화를 나타냄 | (cd)+ | cd가 1번 이상 반복되는 경우와 매칭 |
메타 문자 | 설명 | 예시 | 설명 |
[ ] | 대괄호 안에 있는 문자 집합 중 하나와 매칭 | [a-zA-Z] | a~z, A~Z 중 하나의 문자와 매칭 |
[ ] | 대괄호 안에 있는 문자 집합 중 하나와 매칭 | [^abc] | a, b, c 이외의 하나와 매칭 |
문자 클래스 | 설명 |
\d | 숫자와 매칭 (0-9) |
\D | 숫자가 아닌 것과 매칭 |
\w | 알파벳 문자와 숫자, 밑줄과 매칭 |
\W | 알파벳, 숫자, 밑줄이 아닌 것과 매칭 |
\s | 공백 문자와 매칭 (스페이스, 탭, 개행 등) |
\S | 공백 문자가 아닌 것과 매칭 |
\\. 정규표현식의 점
반복 제어 | 설명 | 예시 | 설명 |
{n} | 정확히 n번 반복 | a{3} | aaa와 매칭 |
{n,} | 최소 n번 반복 | b{2,} | bb, bbb, bbbb, ... 등과 매칭 |
{n, m} | n번 이상 m번 이하 반복 | c{2, 4} | cc, ccc, cccc 와 매칭 |
자주 사용하는 패턴
- 이메일 검사:
Pattern emailPattern = Pattern.compile("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}");
[a-zA-Z0-9._%+-]+ : [ ] 안에 있는
영어 소문자(a~z)
영어 대문자(A~Z)
숫자(0~9)
.
_
%
+
-
의 문자가 1개 이상 포함될 수 있다는 뜻, 이메일의 계정 부분
@ : @
[a-zA-Z0-9.-]+ : [ ] 안에 있는
영어 소문자(a~z)
영어 대문자(A~Z)
숫자(0~9)
.
-
의 문자가 1개 이상 포함될 수 있다는 뜻, 이메일 도메인 부분
\\. : . (마침표 하나)
[a-zA-Z]{2,6} :
영어 소문자(a~z)
영어 대문자(A~Z)
를 2번 이상 6번 이하 반복, 최상위 도메인(TLD) 부분
- 전화번호 검사: \d{3}-\d{3,4}-\d{4}
\d{3} : 숫자(0~9) 3개
-
\d{3,4} : 숫자(0~9) 3개 이상 4개 이하
-
\d{4} : 숫자(0~9) 4개
즉 xxx-xxx-xxxx 또는 xxx-xxxx-xxxx
- 숫자만 포함: ^\d+$
^ : 문자열의 시작
\d+ : 하나 이상의 숫자가 반복
$ : 문자열의 끝
즉 숫자로만 이루어진 문자열
- 영문자만 포함: ^[a-zA-Z]+$
^ : 문자열의 시작
[a-zA-Z]+ : 하나 이상의 영문자가 반복
$ : 문자열의 끝
즉 영문자로만 이루어진 문자열