record logo record

정규 표현식이란?

종류

Java의 경우 Perl와 유사한 방식을 선택하고 있다. 완전히 동일한 것은 아니다. 차이점은 Oracle문서에서 확인 할 수 있습니다.

언제 필요한가?

//==정규 표현식 예시==//
String pwPattern = "^(?=.*[!@#$])(?=.*[a-zA-Z])(?=.*[0-9]).{8,20}$";

정규 표현식 문법

java-regex_grammar

정규 표현식 사용하기

자바에서 정규표현식을 사용할때에는 java.util.regex 패키지 안에 있는 Pattern클래스Matcher클래스 를 주로 사용합니다.

Pattern 클래스

String pattern = "^[0-9]*$"; // 정규표현식 
String str = "12345678"; // 검증 대상

boolean isMatch = Pattern.matches(pattern, str); // isMatch: true

Pattern 클래스 주요 메서드

Parttern 플래그 값 사용(상수)

Matcher 클래스

Pattern pattern = Pattern.compile("^[a-zA-Z]*$"); // 영문(소,대문자)만
String str1 = "12345678"; // 검증 대상1
String str2 = "abcdEFg"; // 검증 대상2

Matcher isMatch1 = pattern.matcher(str1); 
Matcher isMatch2 = pattern.matcher(str2);

System.out.println(isMatch1.find()); // false
System.out.println(isMatch2.find()); // true

Matcher 클래스 주요 메서드

정규 표현식 연습문제

//== ex1, 숫자(0-9) ==//
String pattern = "^[0-9]*$";

//== ex2, 영문(소,대문자) ==//
String pattern = "^[a-zA-Z]*$";

//== ex3, 한글 ==//
String pattern = "^[가-힣]*$";

//== ex4, 영문(소,대문자) + 숫자 + (영문소, 영문대, 숫자 최소 1글자 이상) ==//
String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])$";

//== ex5, 영문(소,대문자) + 숫자 + 5~10자 ==//
String pattern = "^[a-z0-9].{5,10}$";

//== ex6, 영문(소,대문자) + 숫자 + 8~20자 + (영문(소,대문자), 숫자 최소 1글자 이상) ==//
String pattern = "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,20}$";

//== ex7, 영문(소,대문자) + 숫자 + 특수문자 + 8~20자 + (영문소, 영문대, 숫자, 특수문자 최소 1글자 이상) ==//
String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\\W).{8,20}";

//== ex8, ex7 + 공백문자 허용X ==//
String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\\W)(?=\\S+$).{8,20}";

//== ex9, E-mail(ex, hello@gmail.com) ==//
String pattern = "\\w+@\\w+\\.\\w+(\\.\\w+)?";

//== ex10, 전화번호(ex, 010-1234-5678) ==//
String pattern = "^\d{2,3}-\d{3,4}-\d{4}$";

//== ex11, 주민등록번호(ex, 800131-1234565) ==//
String pattern = "\d{6} \- [1-4]\d{6}";

//== ex12, 같은 문자 4개 이상 사용 불가==//
String pattern = "(\\w)\\1\\1\\1";

References