정규표현식

배세훈·2021년 7월 16일
0

Etc/용어

목록 보기
10/16
post-custom-banner

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. 정규식 사용 예제

  1. 숫자만
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("숫자가 아님");
}
  1. 이메일 형식
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("올바른 이메일 형식이 아닙니다. ");
}
  1. 휴대전화 형식
pattern2 = "^\\d{3}-\\d{3,4}-\\d{4}$";
str2 = "010-1234-1234";
if(Pattern.matches(pattern2, str2)) {
    System.out.println("올바른 휴대전화 형식입니다. ");
} else {            
    System.out.println("올바른 휴대전화 형식이 아닙니다. ");
}
  1. 파일 확장자 형식
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):대소문자구별하지않음.(txtpdfhwpxls):txt혹은pdf혹은hwp혹은xls만허용.을이용한or연산!^ : 시작 \ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급. \S : 공백 아닌 문자 +. : .이 반드시 한개는 와야한다. (?i) : 대소문자 구별하지 않음. (txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산! : 끝
-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.

profile
성장형 인간
post-custom-banner

0개의 댓글