정규표현식
사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
입력한 문자열에서 특정한 조건을 표현할 경우 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규식을 이용하면 매우 간단하게 표현할 수 있다.
하지만 간단한 만큼 가독성이 떨어지기때문에 표현식을 숙지하지 않으면 이해하기 힘들다는 문제점이 있다.
문자열 | 설명 |
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 있음 |
? | 앞 문자가 없을 수도 있고 하나 있음 |
[] | 문자의 집함 범위를 나타냄. 앞에^가 나타나면 not을 의미 Ex) [0-9] => 숫자 [a-z] => 알파벳 |
{} | 횟수 또는 범위를 의미 |
() | 하나의 패턴안에 서브 패턴을 지정해서 사용하는 경우 (그룹) |
| | or 조건 |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\z | 입력의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\s | 공백문자 |
\S | 공백문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
?= | 전방탐색()안에서 사용 / 텍스트를 반환하기 전에 뒤쪽을 탐색하는 것 |
?<= | 후방탐색()안에서 사용 / 텍스트를 반환하기 전에 앞쪽을 탐색하는 것 |
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
로드밸런싱 / 서버 부하 분산 (Server Load Balancing) (93) | 2023.09.28 |
---|---|
쿠키(Cookie) 세션(Session) (0) | 2022.10.31 |
프로그래밍 사칙연산 부동소수점 오차 (0.1 + 1.1 != 1.2) (0) | 2022.08.16 |
MSA(MicroService Architecture) (0) | 2022.07.20 |
[배포] JAR와 WAR (0) | 2022.07.11 |
댓글 영역