본문 바로가기

내일배움캠프

Java의 정규표현식

정규표현식 혹은 정규식은 특정 문자열의 규칙을 가지는 문자열의 집합을 표현하는 데 사용되는 언어를 의미한다.

 

정규식 문법 모음

기호 설명 예제
. 임의의 문자 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]  

 

정규 수량 기호

기호 설명 예제
? 앞의 표현식이 없거나 최대 1개 a1? : 1이 최대 한개만 있거나 없을수도 있다 → a(o), a1(o), a11(x), a111(x)
* 앞의 표현식이 없거나 있거나(여러 개) a1* : 1이 있을수도 없을수도 있다 → a(o), a1(o), a11(o), a111(o)
+ 앞의 표현식이 1개 이상(여러개 가능) 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
\d{6} - [1-4]\d{6} 주민등록번호
^\d{3}-\d{2}$ 우편번호

 

String 클래스의 정규식 문법

String 문자열에 정규표현식을 적용해서 필터링을 할 수 있다.

 

String 클래스에 사용 가능한 정규식 메소드:

String 정규식 메서드 설명
boolean matches(String regex) 인자로 주어진 정규식에 매칭되는 값이 있는지 확인
String replaceAll(String regex, String replacement) 문자열내에 있는 정규식 regex와 매치되는 모든 문자열을 replacement 문자열로 바꾼 문자열을 반환
String[] split(String regex) 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할

 

예시:

문자열의 길이가 4혹은 6이고 숫자로만 이루어져 있으면 true 이중 하나라도 만족하지 않으면 false를 리턴하는 메소드를 구현해야 한다.(출처:https://school.programmers.co.kr/learn/courses/30/lessons/12918)

class Solution {
    public boolean solution(String s) {
        boolean answer = ((s.length() == 4 || s.length() == 6) && s.matches("^[0-9]*$")); // 
        return answer;
    }
}

 

'내일배움캠프' 카테고리의 다른 글

MySQL에서의 if문과 case문  (0) 2024.05.30
행렬 간 덧셈  (0) 2024.05.28
Spring 숙련주차 Part3  (0) 2024.05.24
Spring 숙련주차 Part2  (0) 2024.05.24
Spring 숙련주차 Part1  (0) 2024.05.22