728x90
정규표현식이란
정규표현식(Regular Expression)이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.
문자열 사용(생성)에 제약(검증)을 둘때, 특정 패턴을 통해 검증을 할 수 있다
예) 전화번호, 주민등록번호, 이메일
기호
기호 | 설명 | 예제 |
. | - 임의의 문자 1개 | |
^ | - 문자의 시작 ^a : a로 시작하는 단어 - [^] 괄호 안에 있다면 제외 [^a] : 첫번째 a를 제외 (단일 문자) - ^[] 괄호 밖에 있다면 시작 문자 ^[a] : 첫번째 문자가 a인 단어 |
^a : apple [^a] : apple -> p p l e |
$ | - 특정 문자로 끝나는 단어 a$ | $a : banana |
[] | - 괄호 안에 특정 문자 확인 | [a] : apple |
- | - 사이의 문자 혹은 숫자를 의미한다 a-z : 소문자 a 부터 z까지 1-9 : 숫자 1 ~ 9 까지 |
1-9 : 1 2 3 4 5 6 7 8 9 |
| | - or ( 또는 , 혹은 ) | ^[a|b] : apple , banana |
() | - 그룹화 []와 달리 (abc) "abc"하나로 인식 |
01(0|1) : 01뒤에 0 또는 1이 들어간다→ 010(o), 011(o), 012(x) |
{} | - 개수 | a{3}b : aaab(o), aaaab(x) |
\b | - word boundary 단어의 경계 [ 공백 ], [ 탭 ], [ , ], [ / ] |
apple\b : apple juice (o), apple.com (x) |
\B | - \b 부정 | |
\d | - decimal 0~9 사이의 숫자 [0-9]와 동일 |
|
\D | - \d 의 부정 [^0-9]와 동일 |
|
\s | - space 공백 , 탭 | |
\S | - \s 의 부정 | |
\w | - word 알파벳 대소문자+숫자+"_" [a-zA-Z_0-9]와 동일 |
|
\W | - \w 의 부정 |
public class Main {
public static void main(String[] args) {
// 전체 문자열 목록
List<String> words = Arrays.asList("apple", "banana", "cherry");
// 패턴: 각 단어가 'a'를 포함하지 않아야 함
String regex = "^[^a]*$";
Pattern pattern = Pattern.compile(regex);
// 리스트의 각 단어를 검사
for (String word : words) {
Matcher matcher = pattern.matcher(word);
if (matcher.matches()) {
System.out.println("Found word: " + word);
}
}
}
}
수량 기호
기호 | 설명 | 예제 |
? | - 앞의 표현식이 없거나 or 최대 한번 있을 수 있다 | a? : ""(o) , "a"(o) , "aa"(x) |
* | - 앞의 표현식이 있거나 없거나 (여러개) | a* : ""(o) , "a"(o) , "aa"(o) |
+ | - 앞의 표현식이 1개 이상 or 여러개 | a+ : ""(x) , "a"(o) , "aa"(o) |
{n} | - n 개 | a{3} : aaa(o) , aaaa(x) |
{n,m} | - n 부터 m 까지 | a(2,3) : a(x),aa(o),aaa(o),aaaa(x) |
{n,} | - n개 이상 | a{2,} : a(x),aa(o),aaaa(o), |
그룹 기호
기호 | 설명 |
() | - 그룹 및 캡처 |
(?:) | - 비캡처 사용 |
(?=) | - =앞 문자를 기준으로 전방 탐색 |
(?<=) | - =뒤 문자를 기준으로 후방 탐색 |
캡처란 ?
“캡처”는 정규 표현식에서 특정 부분의 문자열을 추출하거나 저장하는 과정을 의미한다.
정규 표현식에서 캡처는 그룹을 사용하여 문자열의 특정 부분을 선택하고, 이후에 그 부분을 참조하거나 사용할 수 있게 한다.
public static void main(String[] args) {
// 정규 표현식 패턴 정의
String regex = "(\\d{3})-(\\d{2})-(\\d{4})";
// 검색할 문자열
String str = "123-45-6789";
// 패턴과 매처 객체 생성
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
// 정규 표현식 매칭 시도
if (matcher.find()) {
// 전체 매칭 : "123-45-6789"
System.out.println("전체 매칭: " + matcher.group(0));
// 첫 번째 캡처 그룹 : "123"
System.out.println("첫 번째 그룹: " + matcher.group(1));
// 두 번째 캡처 그룹 : "45"
System.out.println("두 번째 그룹: " + matcher.group(2));
// 세 번째 캡처 그룹 : "6789"
System.out.println("세 번째 그룹: " + matcher.group(3));
} else {
System.out.println("매칭되는 부분이 없습니다.");
}
}
이스케이프
정규식에서 사용하는 특수문자를 문자로 검색을 하려면 이스케이프를 사용하여 문자로 변환 시켜 검색 해야 한다.
// 마침표를 문자 그대로 검색
String regex = "\\.";
// 문자 '.' 검색
// 백슬래시를 문자 그대로 검색
String regex = "\\\\";
// 문자 '\' 검색
// 하이픈을 문자 그대로 검색
String regex = "\\[-\\]";
// 문자 '-' 검색
자주사용되는 정규식
//숫자
^[0-9]*$
//영문자
^[a-zA-Z]*$
//한글
^[가-힣]*$
//E-Mail
\\w+@\\w+\\.\\w+(\\.\\w+)?
//전화번호
^\d{2,3}-\d{3,4}-\d{4}$
//휴대전화번호
^010-(?:\d{3}|\d{4})-\d{4}$
//주민등록번호
\d{6}\-[1-4]\d{6}
728x90
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
[Spring Batch] 반복 오류 제어 (0) | 2024.09.01 |
---|---|
[Java] 정규표현식 regex 패키지 (0) | 2024.07.29 |
[MSA] 분산 시스템 이벤트 소싱 구현 ( Transaction OutBox Pattern ) (0) | 2024.07.26 |
[MSA] Transaction Outbox 패턴 (0) | 2024.07.10 |
[Spring] JDK Dynamic Proxy 와 CGLIB (0) | 2024.04.24 |