JAVA

정규표현식

Meluu_ 2025. 3. 6. 09:56

 

보통 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