✒️ 2025-05-29 15:53 내용 수정
참고 자료 : 위키 백과 정규 표현식, Inpa dev's JavaScript 정규 표현식 문법 총정리 + 응용 예제, adjh's Java 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴, TCPSchool 정규 표현식의 개념, TCPSchool 정규 표현식의 응용
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
- 여러 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 대부분 표준 라이브러리나 별도의 라이브러리를 이용해 지원한다.
- 다양한 텍스트 처리 작업 및 데이터 작업에 사용할 수 있다.
- 수업과 실습에서는 Java와 JSP 실습 때 사용했다.
- 정규표현식 테스트 사이트 : https://regexr.com/
구성 및 기호
- 구분 문자로
/를 사용하며, /로 시작과 종료 기호를 작성한다.
- 패턴을
/사이에 작성하며, 종료 기호 뒤에 플래그(Flag)를 작성한다.
/regex/flag
플래그
| 플래그 |
설명 |
i |
Ignore Case, 대소문자를 구별하지 않음 |
g |
Global, 문자열 내 모든 패턴 검색(모든 검색 결과를 배열로 반환) |
m |
Multi Line, 문자열의 행이 바뀌어도 검색 |
s |
.이 개행 문자 \n도 포함 |
u |
unicode, 유니코드 전체 지원 |
y |
sticky, 문자열 내 특정 위치에서 검색을 진행하는 sticky 모드 활성화 |
검색 기준 패턴
| 기호 |
설명 |
| |
OR의 의미 |
[] |
대괄호 내이 문자 중 하나를 선택함. |을 여러 개 쓴 것과 같음 |
[^문자] |
대괄호 내의 문자를 제외한 문자 |
^문자열 |
특정 문자열로 시작함 |
문자열$ |
특정 문자열로 끝남 |
a|b : a 또는 b
[a-z] : a부터 z 중 하나
[^a] : a를 제외한 문자
^abc : abc로 시작하는 문자
abc$ : abc로 끝나는 문자
양의 지정
| 기호 |
설명 |
? |
0~1번 발생하는 패턴과 일치시킴 최소한의 매칭을 할 때 사용 가능 |
* |
0번 이상 발생하는 패턴과 일치시킴 |
+ |
1번 이상 발생하는 패턴과 일치시킴 |
{n} |
n번 발생 |
{min,} |
최소 min번 발생 |
{min, max} |
최소 min번 이상, 최대 max번 이하 발생 |
- 일치 횟수에 따른 수량자
- Greedy 수량자 : 가능한 많은 문자를 매칭하려 한다.
- Non-Greedy 수량자 : 가능한 적은 문자를 매칭하려 한다.
| 수량자 유형 |
Greedy 수량자 |
Non-Greedy 수량자 |
설명 |
| 0회 이상 반복 |
* |
*? |
가능한 한 많이(*) 또는 적게(*?) 반복 |
| 1회 이상 반복 |
+ |
+? |
최소 1회 이상 반복 |
| 0 또는 1회 반복 |
? |
?? |
0 또는 1회 반복 |
| 특정 횟수 반복 |
{n} |
{n}? |
정확히 n회 반복 |
| 최소 n회 이상 반복 |
{n,} |
{n,}? |
최소 n회 이상 반복 |
| n회 이상 m회 이하 반복 |
{n,m} |
{n,m}? |
n회 이상 m회 이하 반복 |
a? : a가 0번 또는 1번 반복
a* : a가 0번 이상 반복
a+ : a가 1번 이상 반복
a{2} : a가 2번 발생
a{5, } : a가 최소 5번 발생
a{1, 3} : a가 1번 이상 3번 이하 발생
특정 문자 및 숫자 매칭(약식 표현)
| 기호 |
설명 |
a-zA-Z |
영어 알파벳 전체 |
r-g가-힣 |
한글 범위 지정 |
0-9 |
숫자 범위 지정 |
. |
줄바꿈을 제외한 모든 문자열 |
\d |
숫자 |
\D |
숫자 제외 |
\w |
밑줄 문자를 포함한 영문과 숫자. [a\zA-Z0-9_]와 동일 |
\W |
문자 제외 |
\s |
space 공백 |
\S |
space 공백 제외 |
\특수기호 |
특수기호. *, ^, &, !, ? 등 |
\t |
탭(U+0009) |
\A |
내부 줄이 아닌 문자열의 시작점과 일치 |
\z |
내부 줄이 아닌 문자열의 끝과 일치 |
그룹 패턴
- 특정 패턴을 그룹으로 묶어 해당 패턴이 반복적으로 등장하는 문자열에서 판별 시 사용할 수 있다.
| 기호 |
설명 |
() |
그룹화 및 캡쳐. 캡쳐했던 패턴도 같이 반환 |
(?:패턴) |
캡쳐 없는 그룹화 |
(?=) |
앞쪽 일치 |
(?!) |
부정 앞쪽 일치 |
(?<=) |
뒤쪽 일치 |
(?<!) |
부정 뒤쪽 일치 |
(abc) : abc를 포함
\\d(?=a) : a 앞의 숫자
123a -> 123
(?<=s)\\d : s 뒤의 숫자
s123 -> 123
사용자 지정 정규 표현식 예시
| 정규 표현식 |
설명 |
^[a-z|A-Z]*$ |
영문자만 허용 |
^[a-z]*$ |
소문자만 허용 |
^[A-Z]*$ |
대문자만 허용 |
^[\w]*$ |
공백 미포함 문자열만 허용 |
^[\W]*$ |
공백 포함 문자열만 허용 |
^[\d]*$ |
숫자만 허용 |
^[\D]*$ |
숫자가 아닌 것만 허용 |
[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]$ |
이메일 형식(-, _, . 포함, 대소문자 구분 없음), google.com같은 형식만 지원 |
^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$ |
RFC 5322 Standard 이메일 형식, test.ac.kr같은 형식도 지원 |
^[a-z|A-Z]{3,6}[0-9]{3,6}$ |
아이디 형식(6~12자리) |
(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&()+_~\[\]\\]).{8,}$ |
비밀번호(소문자, 대문자, 특수문자 1개 이상 포함하고 8자 이상) |
^\S+(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&()+_~\[\]\\]).{8,}\S+$ |
비밀번호(공백 미포함 소문자, 대문자, 특수문자 1개 이상 포함하고 8자 이상) |
[\d]{11}*$ |
전화번호 형식 ex) 0101112222 |
^([0-9]{3}[-]+[0-9]{4}[-]+[0-9]{4})|([0-9]{3}[0-9]{4}[0-9]{4})$ |
전화번호 형식 ex) 0101112222 또는 010-1111-2222 |
^([\d]{3}[-]+[\d]{4}[-]+[\d]{4})|([\d]{3}[\d]{4}[\d]{4})$ |
위와 동일 |