정규표현식(Regular Expression)
정규표현식이란?
정규표현식의 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다.
주로 Programming Language나 Text Editor 등 에서 문자열의 검색과 치환을 위한 용도로 쓰이고 있다.
입력한 문자열에서 특정한 조건을 표현할 경우 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규표현식을 이용하면 매우 간단하게 표현 할 수 있다.
정규표현식 표현방법
정규표현식은 표준인 POSIX의 정규표현식과, Perl방식의 PCRE가 대표적이며, 이외에도 수많은 정규표현식이 존재하는데, 정규표현식 간에는 약간의 차이점이 있으나 거의 비슷하다.
정규표현식에서 사용하는 기호를 Meta문자라고 한다.
Meta문자는 표현식 내부에서 특정한 의미를 갖는 문자를 말하며, 공통적인 기본 Meta문자의 종류로는 다음과 같다.
공통적인 기본 Meta 문자 종류
Meta 문자중에 독특한 성질을 지니고 있는 문자클래스'[ ]'라는 문자가 있다
문자클래스는 그 내부에 해당하는 문자열의 범위 중 '한 문자'만 선택한다는 의미이며, 문자클래스 내부에서는 Meta문자를 사용할 수 없거나 의미가 다르게 사용된다.
한문자만 지정하는 Meta 문자 : [ ]
POSIX에서만 사용하는 문자클래스가 있는데, 단축키처럼 편리하게 사용할 수 있다
대괄호'[ ]' 가 붙어있는 모양 자체가 표현식이므로 실제로 문자클래스로 사용할 때에는 대괄호를 씌워서 사용해야만 정상적인 결과를 얻을 수 있다.
대표적인 POSIX 문자클래스
이밖에도 [:cntrl:] : 아스키 제어문자(0~31번, 127번), [:print:] : 출력 가능한 모든 문자, [:xdigit:] : 모든 16진수 숫자 등이 있다.
자주 쓰이는 패턴
1) 숫자만 : ^[0-9]*$
2) 영문자만 : ^[a-zA-Z]*$
3) 한글만 : ^[가-힣]*$
4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$
5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
7) 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$
8) 주민등록번호 : \d{6} - [1-4]\d{6}
9) IP 주소 : ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3})
10) 라인 확인 : (?m)^[ \t]*\r?\n
==> 라인에 tab이 있거나, 스페이스로 띄워져 있으나 문자열이 없는 경우임
====> 빈칸이 생성되었을 때 지울때 편합니다.
예제 1) 파일 확장자 확인
^\\S+.(?i)(txt|pdf|hwp|xls)$
^ : 시작
\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급.
\S : 공백 아닌 문자
+. : .이 반드시 한개는 와야한다.
(?i) : 대소문자 구별하지 않음.
(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!
$ : 끝
-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.
예제 2)
Java 정규표현식
정규표현식은 언어마다 사용방법이 다르며, 여기서는 Java의 정규식에 대해 알아본다.
Java에서는 아래와 같이 정규식을 작성할 수 있다.
Pattern p = new Pattern("^hello$");
Matcher m = p.matcher("hello world");
boolean b = m.matches();
boolean b = Pattern.matches("패턴", "문자열 패턴");
또는, String.replaceAll("패턴", "문자열")을 통해서도 정규식 표현이 가능하다.
참고
http://www.nextree.co.kr/p4327/
http://zvon.org/comp/r/tut-Regexp.html#Pages~Page_1
http://highcode.tistory.com/6
http://http://blog.naver.com/PostView.nhn?blogId=admass&logNo=50166481936