자바 정규식
정규표현식(Regular Expression)이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.
입력값을 정해진 형식에 맞는지 검증해야 할 때에는 정규표현식을 사용하면 쉽게 구현할 수 있다.
예시
한글, 숫자, 영문, 띄어쓰기 빼고 = 모든 특수문자 제거
public static String StringReplace(String str){
String match = "[^\uAC00-\uD7A30-9a-zA-Z]";
str = str.replaceAll(match, " ");
return str;
}
숫자 제외 전부 제거
public static String StringReplace(String str){
String match = "[^0-9]";
str = str.replaceAll(match, " ");
return str;
}
정규식 표
정규식 기본 기호
기호 | 설명 | 예제 |
. | 임의의 문자 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+)? | |
^\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}$ | 우편번호 |
표 출처: [Inpa Dev 👨💻:티스토리]
String 클래스의 정규식 문법
String 문자열에 바로 정규표현식을 적용하여 필터링이 가능하다.
String 클래스에서 지원하는 정규식 메소드로는 다음 3가지가 존재한다.
String 정규식 메서드 | 설명 |
boolean matches(String regex) | 인자로 주어진 정규식에 매칭되는 값이 있는지 확인 |
String replaceAll(String regex, String replacement) | 문자열내에 있는 정규식 regex와 매치되는 모든 문자열을 replacement 문자열로 바꾼 문자열을 반환 |
String[] split(String regex) | 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할 |
'JAVA > 연습노트' 카테고리의 다른 글
[프로그래머스-자바] 한 번만 등장한 문자 (0) | 2024.04.10 |
---|---|
[백준-자바] 9086번 : 문자열 (0) | 2024.04.06 |
[프로그래머스 - 자바] 공 던지기 (0) | 2024.04.03 |
[프로그래머스 - 자바] 구슬을 나누는 경우의 수 (0) | 2024.04.02 |
[프로그래머스 - 자바] 모스부호(1) (0) | 2024.04.02 |