1. 정규표현식 정리
표현식 |
설명 |
^ |
문자열의 시작 |
$ |
문자열의 종료 |
. |
임의의 한 문자 (문자의 종류 가리지 않음, 단, \는 넣을 수 없음 |
* |
앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ |
앞 문자가 하나 이상 |
? |
앞 문자가 없거나 하나있음 |
[] |
문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not을 나타낸다. |
{} |
횟수 또는 범위를 나타낸다. |
() |
소괄호 안의 문자를 하나의 문자로 인식 |
| |
패턴 안에서 or 연산을 수행할 때 사용 |
\s |
공백 문자 |
\S |
공백 문자가 아닌 나머지 문자 |
\w |
알파벳이나 숫자 |
\W |
알파벳이나 숫자를 제외한 문자 |
\d |
숫자 [0-9]와 동일 |
\D |
숫자를 제외한 모든 문자 |
\ |
정규표현식 역슬래시(\)는 확장 문자. 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미 |
(?i) |
앞 부분에 (?i)라는 옵션을 넣어주면 대소문자를 구분하지 않음 |
2. 자주 쓰이는 정규식 패턴
분류 |
정규식 패턴 |
숫자 |
^[0-9]*$ 또는 ^\\d$ |
영문자 |
^[a-zA-Z]*$ |
한글 |
^[가-힣]$ |
영어&숫자 |
^[0-9a-zA-Z]$ 또는 ^\\w$ |
비밀번호 (숫자, 문자 포함의 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{6}\-[1-4]\d{6} |
파일확장자 |
^\\S+.(?i)(txt|pdf|hwp|xls)$ |
이중 파일확장자 |
(.+?)((\\.tar)?\\.gz)$ |
3. 정규식 사용 예제
- 숫자만
String str = "123a";
Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher matcher = pattern.matcher(str);
if(matcher.finD()){
System.out.println(Integer.parseInt(str));
} else {
System.out.println("숫자가 아님");
}
- 이메일 형식
String pattern2 = "^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$";
String str2 = "abc_123@gmail.com";
if(Pattern.matches(pattern2, str2)) {
System.out.println("올바른 이메일 형식입니다. ");
} else {
System.out.println("올바른 이메일 형식이 아닙니다. ");
}
- 휴대전화 형식
pattern2 = "^\\d{3}-\\d{3,4}-\\d{4}$";
str2 = "010-1234-1234";
if(Pattern.matches(pattern2, str2)) {
System.out.println("올바른 휴대전화 형식입니다. ");
} else {
System.out.println("올바른 휴대전화 형식이 아닙니다. ");
}
- 파일 확장자 형식
pattern2 = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
str2 = "abc.txt";
// 이중확장자
// pattern2 = "(.+?)((\\.tar)?\\.gz)$";
// str2= "lib.tar.gz";
if(Pattern.matches(pattern2, str2)) {
System.out.println("올바른 확장자 형식입니다. ");
} else {
System.out.println("올바른 확장자 형식이 아닙니다. ");
}
패턴 분석: ^\S+.(?i)(txt|pdf|hwp|xls):시작 : 가왔기때문에다음에올문자는특수문자로취급하고,\다음특수문자고오면그자체로취급.\S:공백아닌문자+.:.이반드시한개는와야한다.(?i):대소문자구별하지않음.(txt∣pdf∣hwp∣xls):txt혹은pdf혹은hwp혹은xls만허용.∣을이용한or연산! : 끝
-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.