Language/Java

[Java] 자바 정규식 예제

byunghyun23 2020. 12. 7. 16:17

정규식은 스트링을 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
*/