정규식은 스트링을 compareTo() 또는 equals()로 비교하기 어려운 상황에서 특정 패턴으로 비교하기 위해 사용된다.
정규 표현 문법
정규식 | 설명 |
^ | 문자열 시작 |
$ | 문자열 종료 |
. | 임의의 문자 [단 ‘'는 넣을 수 없습니다.] |
* | 앞 문자가 0개 이상의 개수가 존재할 수 있습니다. |
+ | 앞 문자가 1개 이상의 개수가 존재할 수 있습니다. |
? | 앞 문자가 없거나 하나 있을 수 있습니다. |
[] | 문자의 집합이나 범위를 표현합니다. -기호를 통해 범위를 나타낼 수 있습니다. ^가 존재하면 not을 나타냅니다. |
{} | 횟수 또는 범위를 나타냅니다. |
() | 괄호안의 문자를 하나의 문자로 인식합니다. |
| | 패턴을 OR 연산을 수행할 때 사용합니다. |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 문자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | [0-9] 숫자 |
\D | 숫자를 제외한 모든 문자 |
(?i) | 대소문자를 구분하지 않습니다. |
자주 쓰이는 정규 표현
분류 | 정규식 패턴 |
숫자 | ^[0-9]*$ |
영문자 | ^[a-zA-Z]*$ |
한글 | ^[가-힣]*$ |
영어 또는 숫자 | ^[a-zA-Z0-9]*$ |
비밀번호 (숫자, 문자 포함의 6~12자리 이내) | ^[A-Za-z0-9]{6,12}$ |
비밀번호 (숫자, 문자, 특수문자 포함 8~15자리 이내) | ^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$ |
이메일 | ^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$ |
휴대전화 | ^\\d{3}-\\d{3,4}-\\d{4}$ |
일반전화 | ^\\d{2,3}-\\d{3,4}-\\d{4}$ |
주민등록번호 | \d{6} \- [1-4]\d{6} |
String.matches()를 이용한 정규식 예제
String str1 = "aabcd";
/**
* 이해를 돕기 위한 데이터 표현
* str1.charAt(0) : 'a'
* str1.charAt(1) : 'a'
* str1.charAt(2) : 'b'
* str1.charAt(3) : 'c'
* str1.charAt(4) : 'd'
*/
String pattern1 = "[abc]....";
str1.matches(pattern1); // true
/**
* pattern1
* str1.charAt(0) 값이 'a', 'b', 'c' 중 하나이고
* 뒤에 4개의 문자가 존재하므로 true
*/
String pattern2 = "a*bcda*";
str1.matches(pattern2); // true
/**
* pattern2
* 'a'가 0개 이상 존재 (str1.charAt(0), str1.charAt(1)) 하고
* str1.charAt(2) : 'b'
* str1.charAt(3) : 'c'
* str1.charAt(4) : 'd' 와 일치하며
* 'a'가 0개 이상 존재(0개) 하므로 true
*/
String pattern3 = "a+bcd+";
str1.matches(pattern3); // true
/**
* pattern3
* 'a'가 1개 이상 존재 (str1.charAt(0), str1.charAt(1)) 하고
* str1.charAt(2) : 'b'
* str1.charAt(3) : 'c' 와 일치하며
* 'd'가 1개 이상 존재 (str1.charAt(4)) 하므로 true
*/
String pattern4 = "aa?bcdf?";
str1.matches(pattern4); // true
/**
* pattern4
* str1.charAt(0) : 'a'
* 'a'가 없거나 하나 존재 (str1.charAt(1)) 하고
* str1.charAt(2) : 'b'
* str1.charAt(3) : 'c'
* str1.charAt(4) : 'd' 와 일치하며
* 'f'가 없거나 하나 존재 (없음) 하므로 true
*/
String pattern5 = "(aa)..d";
str1.matches(pattern5); // true
/**
* pattern5
* str1.charAt(0) : 'a'
* str1.charAt(1) : 'a' 와 일치하며
* 뒤에 2개의 문자가 존재하고
* str1.charAt(4) : 'd' 와 일치하므로 true
*/
String pattern6 = "a{2}..d";
str1.matches(pattern6); // true
/**
* pattern6
* str1.charAt(0) : 'a'
* str1.charAt(1) : 'a' 와 일치하며
* 뒤에 2개의 문자가 존재하고
* str1.charAt(4) : 'd'와 일치하므로 true
*/
String pattern7 = "a[(a)(b)]..d";
str1.matches(pattern7); // true
/**
* pattern7
* str1.charAt(0) : 'a'
* str1.charAt(1) : 'a' 또는 'b'와 일치하며
* 뒤에 2개의 문자가 존재하고
* str1.charAt(4) : 'd'와 일치하므로 true
*/
String pattern8 = "a(a|b)(a|b)c*d+c?";
str1.matches(pattern8); // true
/**
* pattern8
* str1.charAt(0) : 'a'
* str1.charAt(1) : 'a' 또는 'b'
* str1.charAt(2) : 'a' 또는 'b' 와 일치하며
* 'c'가 0개 이상 존재 (str1.charAt(3)) 하고
* str1.charAt(4) : 'd' 와 일치하고
* 'c'가 없거나 하나 존재 (없음) 하므로 true
*/
String pattern9 = "(.*)c(.*)";
str1.matches(pattern9); // true
/**
* pattern9
* 임의 문자가 0개 이상 존재 (str1.charAt(0), str1.charAt(1), str1.charAt(2)) 하며
* str1.charAt(3) : 'c' 와 일치하고
* 임의 문자가 0개 이상 존재 (str1.charAt(4)) 하므로 true
*/
String pattern10 = "[^bcd]a?(bc)d+";
str1.matches(pattern10); // true
/**
* pattern10
* str1.charAt(0) 값이 'b', 'c', 'd'이 아니고
* 'a'가 없거나 하나 존재 (str1.charAt(1)) 하며
* str1.charAt(2) : 'b'
* str1.charAt(3) : 'c' 와 일치하고
* 'd'가 1개 이상 존재 (str1.charAt(4)) 하므로 true
*/
'Language > Java' 카테고리의 다른 글
[Java] Map 모든 데이터 가져오기 (0) | 2022.01.21 |
---|---|
[Java] 자주 사용하는 스트링 메소드(String Method) 정리 (0) | 2020.12.07 |
[Java] 프로그램 실행 과정 (0) | 2020.12.07 |