정규표현식, 자주 사용하는 정규식

정규표현식, 자주 사용하는 정규식

정규표현식

  • 정규표현식은 언어와 상관없이 표준화가 거의 되어있다.
  • 따라서 정규표현식을 공부하면 언어를 초월해서 해당 언어(java,c,c++,js,python등)에 금방 적응할수있다.
  • 주의 : 자바에서는 역슬래시()를 단독으로 쓸수가 없음 -> 따라서 역슬래시 두번(\) 써줘야 다른 언어의 역슬래시 하나와 동일하다.

http://www.nextree.co.kr/p4327/

http://www.nextree.co.kr/p4327/




기본형

1
/패턴/[플래그]

http://www.nextree.co.kr/p4327/




자주 사용하는 정규식 예시

1
2
3
4
5
6
7
8
//한글이름(2~5글자)
^[가-힣]{2,5}$

//휴대전화번호
^(010|011)[-\s]?\d{3,4}[-\s]?\d{4}$

//이메일주소표현
^[\w\.-]{1,64}@[\w\.-]{1,125}\.\w{2,4}$




예시1

  1. 예시 : 정규식을 이용한 전화번호 형식변환
  2. 예시 : 정규표현식으로 문자열변환




예시2 : 정규표현식을 이용해 비밀번호 생성 규칙을 테스트하는 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
String[] pw = {
"adcdsda한글",
"AS!112342",
"asasafdsfa",
"123456789",
"asd12345-=",
};

for(String p : pw){
String lenReg = "[a-zA-Z0-9!@#$%^&*]{8,}";

//사용자가 어떤 부분에서 비밀번호 규칙을 어겼는지 알기위해 아래 변수 생성
String engReg = "[a-zA-Z]";
String numReg = "[0-9]";
String specReg = "[!@#$%^&*]";

System.out.print(p+"은(는) ");
int has = 0;
if(Pattern.matches(lenReg, p)){
has+=Pattern.compile(engReg).matcher(p).find() ? 1:0;
has+=Pattern.compile(numReg).matcher(p).find() ? 1:0;
has+=Pattern.compile(specReg).matcher(p).find() ? 1:0;
if(has < 2){
System.out.println("영문,숫자,특수문자(!@#$%^&*) 중 두 가지 이상이 조합하여 입력하세요");
}else{
System.out.println("적합한 비번입니다");
}
}else{
System.out.println("영문,숫자,특수문자(!@#$%^&*)로 8자 이상 입력하세요");
}
}

//출력값
adcdsda한글은(는) 영문,숫자,특수문자로 8자 이상 입력하세요
AS!112342은(는) 적합한 비번입니다
asasafdsfa은(는) 영문,숫자,특수문자 중 두 가지 이상이 조합하여 입력하세요
123456789은(는) 영문,숫자,특수문자 중 두 가지 이상이 조합하여 입력하세요
asd12345-=은(는) 영문,숫자,특수문자로 8자 이상 입력하세요




예시3 : 메뉴에서 부추가 들어간 메뉴만 출력하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//메뉴 중에 부추가 들어간 메뉴 모두를  출력해보자
String menu = "오리매운탕 짜장면,부추잡채 메밀전,매운부추전 불고기, 부추";

//1.split으로 나눠서 변수에 담기
String[] menuArr = menu.split("[, ]");
System.out.println(Arrays.toString(menuArr));

//2.패턴만들기
String pattern = "부추";
Pattern pat = Pattern.compile(pattern);

//3. 반복문을 통해 출력
for(String s : menuArr){
Matcher mat = pat.matcher(s);
if(mat.find())System.out.println("부추가 들어간 모든 메뉴 : "+s);
if(mat.matches()) System.out.println("부추만 들어간 메뉴 : "+s);
}

//출력값
부추가 들어간 모든 메뉴 : 부추잡채
부추가 들어간 모든 메뉴 : 매운부추전
부추가 들어간 모든 메뉴 : 부추
부추만 : 부추




참고