보통 String.matches, replaceAll 에 많이 사용하므로 거기에 맞춰서 정리
1. 기본적인 정규 표현식 요소
1.1 문자 클래스(Character Classes)
. | 임의의 한 문자 (개행 제외) |
[abc] | a, b, c 중 하나 |
[^abc] | a, b, c를 제외한 어떤 문자 |
[a-z] | 소문자 알파벳 한 글자 (a~z) |
[A-Z] | 대문자 알파벳 한 글자 (A~Z) |
[0-9] | 숫자 (0~9) |
[a-zA-Z0-9] | 영문 대소문자 + 숫자 |
\d | 숫자 (0-9) (== [0-9]) |
\D | 숫자가 아닌 문자 (== [^0-9]) |
\w | 알파벳 또는 숫자 또는 _ ([a-zA-Z0-9_]) |
\W | \w가 아닌 문자 (공백, 특수 문자 등) |
\s | 공백 문자 (스페이스, 탭, 개행 등) |
\S | 공백이 아닌 문자 |
1.2 앵커(Anchors)
정규식설명
^ | 문자열의 시작 |
$ | 문자열의 끝 |
"hello".matches("^h.*"); // true (h로 시작)
"hello".matches(".*o$"); // true (o로 끝남)
"hello".matches("^h.*o$"); // true (h로 시작, o로 끝)
1.3 수량자(Quantifiers)
* | 0개 이상 ({0,}) |
+ | 1개 이상 ({1,}) |
? | 0개 또는 1개 ({0,1}) |
{n} | 정확히 n개 |
{n,} | 최소 n개 이상 |
{n,m} | n개 이상 m개 이하 |
"abc".matches("a.*c"); // true (a로 시작하고 c로 끝나는 문자열)
"aaa".matches("a+"); // true (a가 1개 이상)
"aaa".matches("a{3}"); // true (a가 정확히 3개)
"aaaa".matches("a{2,4}"); // true (a가 2~4개)
"aa".matches("a{3,}"); // false (a가 3개 이상이어야 함)
1.4 그룹(Grouping)과 백참조(Backreferences)
그룹화 (Grouping)
소괄호 ()로 특정 패턴을 그룹화
(abc) | "abc"라는 문자열을 하나의 그룹으로 묶음 |
(?:abc) | 비캡처 그룹 (뒤에서 참조할 필요 없는 그룹) // 매칭에는 사용되지만 저장되지 않음 |
"hellohello".matches("(hello){2}"); // true (hello가 두 번 반복됨)
비 캡처 그룹의 경우 String.match에서 사용할때는 신경쓰지 않아도 된다.
단 Pattern 객체로 받아서 Match
백참조 (Backreferences)
그룹화된 패턴을 \n (\1, \2 등)으로 다시 참조
([a-z])\1 | 같은 문자가 두 번 연속됨 |
"aa".matches("([a-z])\\1"); // true (연속된 같은 문자)
"ab".matches("([a-z])\\1"); // false (b가 a와 같지 않음)
1.5 OR 연산 (|)
여러 개의 패턴 중 하나라도 일치하면 true를 반환
"hello".matches("hello|world"); // true
"world".matches("hello|world"); // true
"hi".matches("hello|world"); // false
1.6 이스케이프(Escape)
정규 표현식에서 .(점), *(별표) 등 특수문자는 \를 붙여야 일반 문자로 인식
자바에서는 \\ 두번 써야함
\. | 문자 . (점) |
\* | 문자 * |
\? | 문자 ? |
\\ | 백슬래시 (\) |
"3.14".matches("3\\.14"); // true
"3\14".matches("3\\\14"); // true
"3?14".matches("3\\?14"); // true
3. 정리
. | 임의의 한 문자 |
^ $ | 문자열의 시작과 끝 |
[] | 문자 클래스 (여러 문자 중 하나) |
[^] | 제외 |
\d \w \s | 숫자, 문자, 공백 |
* + ? {n,m} | 반복 수량자 |
(abc) \1 | 그룹 및 백참조 |
` | ` |
\. \\ | 이스케이프 |
그런데 \\d \\w \\s 같은건 잘 기억이 안난다.
[A-Z] [0-9]등 [] 이걸로 다 해결이 가능하기에 보통 이걸 많이 쓰게된다.
\\1 이것도 처음알았는데 반복 문자 잡아낼때 아주 좋다.
'JAVA' 카테고리의 다른 글
ENUM - 열거형 (0) | 2025.02.10 |
---|---|
배열의 복사 : clone() 메서드 자바 (0) | 2024.09.03 |
Lambda & Stream (0) | 2024.08.17 |
Optional<T> (0) | 2024.08.17 |