상세 컨텐츠

본문 제목

정규식(Regular Expression)

CS/CS

by Chan.94 2022. 8. 24. 20:53

본문

반응형

정규표현식

사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

입력한 문자열에서 특정한 조건을 표현할 경우 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규식을 이용하면 매우 간단하게 표현할 수 있다.

하지만 간단한 만큼 가독성이 떨어지기때문에 표현식을 숙지하지 않으면 이해하기 힘들다는 문제점이 있다.

 

문자열 설명
^   문자열의 시작
$   문자열의 끝
.   임의의 한 문자
*   앞 문자가 없을 수도 무한정 많을 수도 있음
+   앞 문자가 하나 이상 있음
?   앞 문자가 없을 수도 있고 하나 있음
[]   문자의 집함 범위를 나타냄.
 앞에^가 나타나면 not을 의미
 Ex) [0-9] => 숫자
       [a-z] => 알파벳
{}   횟수 또는 범위를 의미
()   하나의 패턴안에 서브 패턴을 지정해서 사용하는 경우 (그룹)
|   or 조건
\   확장 문자의 시작
\b   단어의 경계
\B   단어가 아닌것의 경계
\A   입력의 시작부분
\G   이전 매치의 끝
\z   입력의 끝 
\Z   입력의 끝이지만 종결자가 있는 경우
\s   공백문자
\S   공백문자가 아닌 나머지 문자
\w   알파벳이나 숫자
\W   알파벳이나 숫자를 제외한 문자
\d   [0-9]와 동일
\D   숫자를 제외한 모든 문자
?=   전방탐색()안에서 사용 / 텍스트를 반환하기 전에 뒤쪽을 탐색하는 것
?<=   후방탐색()안에서 사용 / 텍스트를 반환하기 전에 앞쪽을 탐색하는 것

 


JAVA Example

String pattern = "";

pattern = "^[^0-9]*$";
//^[^0-9] : 숫자가 아닌
System.out.println(Pattern.matches(pattern, "123"));	//false
System.out.println(Pattern.matches(pattern, "abc"));	//true

/**
 * 영문자
 */
pattern = "^[a-zA-z]*$";
System.out.println("영문자 테스트 : " + Pattern.matches(pattern, "abcd"));	//true
System.out.println("영문자 테스트 : " + Pattern.matches(pattern, "1345abcd"));	//false
System.out.println("영문자 테스트 : " + Pattern.matches(pattern, "1q2w3e4r"));	//false

/**
 * 한글
 */
pattern = "^[가-힣]*$";
System.out.println("한글 테스트 : " + Pattern.matches(pattern, "abcd"));	//false
System.out.println("한글 테스트 : " + Pattern.matches(pattern, "가나다라"));	//true

/**
 * 이메일
 */
// id : 영어or숫자
// host : 소문자영어.소문자영어(2~6자리)
pattern = "^[a-zA-z0-9]+@[a-z]+\\.[a-z]{2,6}$";	
System.out.println("이메일 테스트 : " + Pattern.matches(pattern, "devlog@devlog.com"));	//true
System.out.println("이메일 테스트 : " + Pattern.matches(pattern, "devlog@devlog.c"));	//false
System.out.println("이메일 테스트 : " + Pattern.matches(pattern, "devlog@devlog.cccooommm"));	//false
System.out.println("이메일 테스트 : " + Pattern.matches(pattern, "devlog@devlog..com"));	//false
System.out.println("이메일 테스트 : " + Pattern.matches(pattern, ""));	//false

/**
 * 전화번호
 */
pattern = "^[0-9]{2,3}\\-[0-9]{3,4}\\-[0-9]{4}$";	
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, "02-123-4567"));	//true
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, "010-1234-5678"));	//true
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, "010-1234-567"));	//false
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, "010-12345678"));	//false
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, "0100-1234-5678"));	//false
System.out.println("전화번호 테스트 : " + Pattern.matches(pattern, ""));	//false

/**
 * 주민등록번호
 */
pattern = "^[0-9]{6}\\-[1-4][0-9]{6}$";
System.out.println("주민등록번호 테스트 : " + Pattern.matches(pattern, "940101-1234567"));	//true	
System.out.println("주민등록번호 테스트 : " + Pattern.matches(pattern, "940101-5234567"));	//false	
System.out.println("주민등록번호 테스트 : " + Pattern.matches(pattern, "9401010-1234567"));	//false	
System.out.println("주민등록번호 테스트 : " + Pattern.matches(pattern, "940101-123456"));	//false	

/**
 * 비밀번호
 */
//조건1 : 영어1자리 이상 => .*[a-zA-Z]
//조건2 : 숫자1자리 이상 => .*[0-9]
//조건3 : 특수문자 1자리 이상 => .*\\W
pattern = "^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*\\W)[a-zA-Z0-9\\W]{8,16}$";
System.out.println("비밀번호 테스트 : " + Pattern.matches(pattern, "12345a6789"));	//	false
System.out.println("비밀번호 테스트 : " + Pattern.matches(pattern, "12345a6789!"));	//	true
System.out.println("비밀번호 테스트 : " + Pattern.matches(pattern, "12345a6789!111111111111111111111"));	//	false
System.out.println("비밀번호 테스트 : " + Pattern.matches(pattern, "12345a6789!111111"));	//	false
System.out.println("비밀번호 테스트 : " + Pattern.matches(pattern, "12345a6789!11111"));	//	true
반응형

관련글 더보기

댓글 영역

>