JAVA

자바 정규식 Reqular Expression

경딩 2024. 12. 23. 17:40

 

만약 숫자로만 이루어져 있는지, 대문자, 소문자를 포함하고 있는지 검사하고 싶다면 요소 하나하나를 비교하는 방법도 있지만 정규식을 이용하며 간단하게 확인할 수 있다.

 

 

 


정규식 문법 기호 모음

 

정규식 기본 기호

기호 설명 예제
. 임의의 문자 1개를 의미  
^ 시작을 의미한다
[] 괄호 안에 있다면 일치하지 않는 부정의 의미로로 쓰인다
^a : a로 시작하는 단어
[^a] : a가 아닌 철자인 문자 1개
$ $앞의 문자열로 문자가 끝나는지를 의미한다 a$ : a로 끝나는 단어
[] [] 괄호 안의 문자가 있는지를 확인한다 [ab][cd] : a,b중 한 문자와 c,d중 한 문자
→ ac ad bc bd 
[^] [] 대괄호 안에 ^ 문자가 있으면, 제외를 뜻함

- 대괄호 안에 ^ 가 쓰이면 제외의 뜻
- 대괄호 밖에 ^ 가 쓰이면 시작점의 뜻
[^a-z] : 알파벳 소문자 a부터 z까지를 제외한 모든 문자
- 사이의 문자 혹은 숫자를 의미한다 [a-z] : 알파벳 소문자 a부터 z까지 하나
[a-z0-9] : 알파벳 소문자 전체,0~9 중 한 문자
| 또는 [a|b] : a 혹은 b
() 그룹 01(0|1) : 01뒤에 0 또는 1이 들어간다
→ 010(o), 011(o), 012(x)
{} 개수 a{3}b : a가 3번 온 후 b가 온다
→ aab(x), aaab(o), aaaab(o)
\b 공백, 탭, ",", "/" 등을 의미한다 apple\b : apple뒤에 공백 탭등이 있다
→ apple juice (o), apple.com (x)
\B \b의 부정
공백 탭등이 아닌 문자인 경우 매치한다
apple\B
→ apple.com (o)
\d 0~9 사이의 숫자
[0-9]와 동일
 
\D \d의 부정
숫자가 아닌 어떤 문자, [^0-9]와 동일
 
\s 공백, 탭  
\S 공백, 탭이 아닌 문자  
\w 알파벳 대소문자+숫자+"_"

[a-zA-Z_0-9]와 동일
 
\W \w의 부정

[^a-zA-Z_0-9]
 

 

정규식 수량 기호

기호 설명 예제
? 앞의 표현식이 없거나 or 최대 한개만 a1? : 1이 최대 한개만 있거나 없을수도 있다
→ a(o), a1(o), a11(x), a111(x)
* 앞의 표현식이 없거나 or 있거나 (여러개) a1* : 1이 있을수도 없을수도 있다
→ a(o), a1(o), a11(o), a111(o)
+ 앞의 표현식이 1개 이상 or 여러개 a1+ : 1이 1개 이상있다
→ a(x), a1(o), a11(o), a111(o)
{n} 딱 n개 있다 a{3} : a가 딱 3개 있다
→ aa(x), aaa(o), aaaa(x), aaaaaaa(x)
{n, m} n개 이상 m개 이하 a{3,5} : a가 3개 이상 5개 이하 있다
→ aa(x), aaa(o), aaaa(o), aaaaaaa(x)
{n,} n개 이상 a{3,} : a가 3개 이상 있다
→ aa(x), aaa(o), aaaa(o), aaaaaaa(o)

 

정규식 그룹 캡쳐 기호

기호 설명
() 그룹 및 캡쳐
(?:) 찾지만 그룹에 포함 안됨
(?=) =앞 문자를 기준으로 전방 탐색
(?<=) =뒤 문자를 기준으로 후방 탐색

 

자주 사용되는 정규식 샘플

정규 표현식 설명
^[0-9]*$ 숫자
^[a-zA-Z]*$ 영문자
^[가-힣]*$ 한글
\\w+@\\w+\\.\\w+(\\.\\w+)? E-Mail
^\d{2,3}-\d{3,4}-\d{4}$ 전화번호
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ 휴대전화번호
\d{6} \- [1-4]\d{6} 주민등록번호
^\d{3}-\d{2}$ 우편번호

출처: https://inpa.tistory.com/entry/JAVA-☕-정규식Regular-Expression-사용법-정리 [Inpa Dev 👨‍💻:티스토리]

 

 

 

 

 


 

String 정규식 메서드 설명
boolean matches(String regex) 인자로 주어진 정규식에 매칭되는 값이 있는지 확인

 

 

        String s = "1";
        boolean matches = s.matches("^[0-9]$"); // true  , 0-9 까지 일치하는 문자가 하나인지 확인

        s = "11";
        matches = s.matches("^[0-9]$"); // false

 

전체 문자열이 숫자로만 이루어졌는지 확인하고 싶다면?

 (0-9 문자열과 일치하는지, 일치하는 경우 길이가 1 이상인지)
        String s = "1";
        boolean matches = s.matches("^[0-9]+$"); // true
    
        s = "11";
        matches = s.matches("^[0-9]+$"); // true

 

 

숫자로만 이루어진 문자열의 길이가 2 인지?

        String s = "1";
        boolean matches = s.matches("^[0-9]{2}$"); // false
        s = "11";
        matches = s.matches("^[0-9]{2}$"); // true

 

 

숫자로만 이루어진 문자열의 길이가 2 이상인지?

        boolean matches = s.matches("^[0-9]{2,}$"); // true
       
        s = "111";
        matches = s.matches("^[0-9]{2,}$"); // true
        
        
        String regex = "^[0-9]{1,3}$"; // 숫자 1~3개 매치

 


  • 숫자와 영문자로 이루어진 경우
    • [] 괄호 안에 문자가 있는지를 확인한다.
    • + 앞의 표현식이 하나이상 있다.

 

        String s = "123abcA";
        boolean matches = s.matches("^[0-9a-z]+$"); // true

 

특수문자 포함 경우

        String s = "123abcA#@";
        boolean matches = s.matches("^[0-9a-zA-Z#@]+$"); // true