본 문서의 저작권은 anti-nhn license에 따릅니다.
*본 페이지에는 자바스크립트가 많이 들어있습니다. 자바스크립트가 실행되지 않으면 제대로 보이지 않습니다.
*본 페이지는 IE용 태그를 사용하였으므로, firefox 등에서는 정상작동하지 않을 수 있습니다.
*테스트를 해보실라문 요기를 클릭

차례

1. 정규식이란?

2. 정규식 만들기

  1. Javascript
  2. Java

3. 정규식 표현법

*는 valid, 는 invalid
*형광 초록 바탕 부분은 매칭되는 부분.
*예제는 javascript 기준이며, 언어에 따라 다소 차이가 발생할 수 있다.
문자 용도 예제
\
  • 특수문자를 의미
  • 특수문자의 사용을 제외(특수문자 앞에서)
  • b는 b라는 글자를 의미 하지만 \b는 단어 경계를 의미
  • *은 0번이상 반복이라는 의미이지만, \*는 *이라는 글자를 의미.
^ 문자열의 시작. []안에서는 not의 의미
* ^A는 "A로 시작"이라기 보다는 "시작 직후에 A가 나온다"는 의미로 해석하는 것이 좋다. 즉, 시작과 끝과 같은 빈 공간을 하나의 문자로 간주하는 것이 좋다.
$ 문자열의 마지막
* 0번 이상 반복
+ 1번 이상 반복 ( = {1,} )
? 0번 이나 1번
. new line 을 제외한 모든 글자
(x) x를 체크하고 체크한 값을 변수로 저장
(?:x) x를 체크하고 체크한 값을 변수로 저장하지 않음
x|y x 또는 y
x(?=y) x후에 y가 나오고, x부분만 매칭되는 부분으로 간주
x(?!y) x가 나오고 그 뒤에 y가 있으면 안 됨
{n} 앞에 지정한 것이 n개
{n,} 앞에 지정한 것이 n개 이상
{n,m} 앞에 지정한 것이 n~m개
[xyz] x나 y나 z. []안에는 얼마든지 쓸 수 있다.
[x-z] x에서 z까지
[^xyz] x,y,z를 제외한 나머지 모든 것
[\b] 백스페이스. \b와 혼동하지 말것. 일반적인 String에서는 \b가 백스페이스를 의미한다.
\b 단어의 경계.[\b]와 혼동하지 말것.
\B \b 를 제외한 전부
\cX 컨트롤X와 매칭. \cM은 컨트롤M과 매칭
\d 숫자.[0-9]와 같음
\D \d 를 제외한 전부
\f form-feed
\n new line
\r carriage return
\s white space
ex>탭, 띄어쓰기, \n, \r
\S \s 를 제외한 전부
\t
\v vertical tab
\w 알파벳+숫자+_. [A-Za-z0-9_]와 동일
\W \w 빼고 전부
\n \n이 자연수일때, ()로 지정한 n번째 정규식 (th)가 \1로 지정된다.
\xhh hh는 hexacode, Code table 보기
\uhhhh hhhh는 hexacode, 코드 번호> 3131:ㄱ 3163:ㅣ ac00:가 d7a3:힣 (javascript, java)

4. 정규식 사용 예제


5. Javascript 정규식 함수

함수 코드예제 코드설명
Array RegExp.exec (to be checked) var myRe=/d(b+)(d)/ig; var myArray = myRe.exec("cdbBdbsbz");

boolean RegExp.test(to be checked) var myRe=/d(b+)(d)/ig; var checked = myRe.test("cdbBdbsbz"); document.write("checked = " + checked +";<br>");

실행결과:
String RegExp.toString() var myRe=/d(b+)(d)/ig; var str = myRe.toString(); document.write(str);

실행 결과:
String String.replace(pattern or string, to be replaced) var str = "abcdefe"; document.write(str.replace("e" , "f")); 실행 결과:

e가 2번 있지만, 첫번째 인자가 정규식이 아니라 문자열일 경우는 첫번째 것만 바꾼다.
var str = "aba"; document.write(str.replace(/^a/ , "c")); 실행 결과:
var re = /(\w+)\s(\w+)/; var str = "John Smith"; newstr = str.replace(re, "$2, $1"); document.write(newstr) 실행 결과:

re에 의해서 찾아진 문자열 들은 re에서 ()로 표현된 순서대로 $1, $2와 같이 변수로 저장된다.
var re = /\s(?:http|https):\/\/\S*(?:\s|$)/g; var str = "url is http://iilii.egloos.com/ !!\n"; str += "blah home: http://www.blah.co.kr"; newstr = str.replace(re, function (str,p1,offset,s) { return "<a href='" + str + "'>" + str + "</a>"; } ).replace(/\n/, "<br>"); document.write(newstr);

str: 찾은 문자열
p1: ()에서 검색된 1번째 문자열. 마찬가지로 p2,p3 등도 가능
offset: str을 찾은 위치
s : 원본 문자열.
Array String.match(regular expression var str = "ABCdEFgHiJKL"; var myResult = str.match(/[a-z]/g ); for(var cnt = 0 ; cnt < myResult.length; cnt++){ document.write(cnt +":" + myResult[cnt] +"<br>"); } document.write("비교<br>"); var str = "ABCdEFgHiJKL"; var myResult = /[a-z]/g.exec(str); for(var cnt = 0 ; cnt < myResult.length; cnt++){ document.write(cnt +":" + myResult[cnt] +"<br>"); } 실행 결과:

String.match(RegExp) =>g flag가 있으면 다 찾아낸다.
RegExp.exec(String) =>g flag가 있어도, 한 개만 찾고 끝낸다.
Array String.split([separator[, limit]]) var str = "ABCdEFgHiJKL"; var myResult = str.split(/[a-z]/g , 3); for(var cnt = 0 ; cnt < myResult.length; cnt++){ document.write(cnt +":" + myResult[cnt] +"<br>"); } 실행 결과:

주어진 문자열을 separator를 기준으로 limit 만큼 자른다.

6. 정규식으로 만든 유용한 Javascript 함수

String removeTags(input)

HTML tag부분을 없애준다
function removeTags(input) { return input.replace(/<[^>]+>/g, ""); };
example>
var str = "<b>blah</b> <i>soft</i>"; document.write(str +"<br>"); document.write(removeTags(str)); result>

String String.trim()

문자열의 앞뒤 공백을 없애준다.
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };
example>
var str = " untrimed string "; document.write("========" + str+ "==============<br>"); document.write("========" + str.trim() + "=============="); result>

String String.capitalize()

단어의 첫 글자를 대문자로 바꿔준다.
String.prototype.capitalize = function() { return this.replace(/\b([a-z])/g, function($1){ return $1.toUpperCase(); }) ; };
example>
var str = "korea first world best"; document.write(str.capitalize()); result>

String number_format(input)

입력된 숫자를 ,를 찍은 형태로 돌려준다
function number_format(input){ var input = String(input); var reg = /(\-?\d+)(\d{3})($|\.\d+)/; if(reg.test(input)){ return input.replace(reg, function(str, p1,p2,p3){ return number_format(p1) + "," + p2 + "" + p3; } ); }else{ return input; } }
example>
document.write(number_format(1234562.12) + "<br>"); document.write(number_format("-9876543.21987")+ "<br>"); document.write(number_format("-123456789.12")+ "<br>"); result>

7. Java 정규식 함수

Pattern p = Pattern.compile("(a*)(b)");
Matcher m = p.matcher("aaaaab");
if (m.matches()) {
    for (int i = 0; i < m.groupCount() + 1; i++) {
        System.out.println(i + ":" + m.group(i));
    }
} else {
    System.out.println("not match!");
}

result>
0:aaaaab
1:aaaaa
2:b
0번째는 매칭된 부분.
String a = "I love her";
System.out.println(a.replaceAll("([A-Z])", "\"$1\""));

result>
"I" love her
자바도 $1을 쓸 수 있다.
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "dog");
    System.out.println(sb.toString());
}
m.appendTail(sb);
System.out.println(sb.toString());

result>
one dog
one dog two dog
one dog two dogs in the yard