정규표현식
테스트프로그램 : http://forta.com/books/0672325667/RegExTester_JavaScript.zip
1.문자 하나 찾기 : .
. : 한문자 아무거나, ..: 두문자 아무거나, 연속해서 사용 가능하다.
예문:
sales.xls
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
검색어 : sales.
결과:
sales.
sales1
sales2
sales3
\. : 마침표, \\: \를 찾음
2. 집합문자 : []
[ns] : n 혹은 s 가 들어간 문자를 찾음
예문:
The pharse "regular expression" is often abbreviated as RegEx or regex.
검색어 : [Rr]eg[Ee]x
결과 :
RegEx
regex
[0123456789] = [0-9], [A-Z], [a-f]
[A-Za-z0-0] : 모든영숫자와 일치
예문:
<BODY BGCOLOR="#336633" TEXT="#FFFFFF" MARGINEWIDTH="0" MARGINEHEIGHT="0" TOPMARGINE="0" LEFTMARGINE="0">
검색어 : #[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]
결과 :
#336633
#FFFFFF
^ : 제외
예문 ; sales.xls
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
sam.xls
ca1.xls
검색어 : [ns]a[^0-9].xls
결과 :
sam.xls
예문:
var myArray = new Array();
if(myArray[0] == 0)
{
}
검색어 : myArray\[[0-9]\]
결과 : myArray[0]
예문 :
\home\ben\sales\
검색어 : \\
결과 :
\
\
\
\
[/b] 역스페이스
\f 페이지 넘김(Form feed)
\n 줄바꿈
\r 캐리지 리턴
\t 탭
\v 수직 탭
\d : 숫자 하나, [0-9] 와 같음
\D : 숫자 제외, [^0-9] 와 같음
예문:
var myArray = new Array();
if(myArray[0] == 0)
{
}
검색어 : myArray\[\d\]
결과 : myArray[0]
\w : 대소문자와 밑줄을 포함하는 모든 영숫자, [a-zA-Z0-9_] 와 같음
\W : 영숫자나 밑줄이 아닌 모든 문자, [^a-zA-Z0-9_] 와 같음
예문:
11213
A1C2E3
48075
48237
M1B4F2
90046
H1H2H2
검색어 : \w\d\w\d\w\d
결과:
A1C2E3
M1B4F2
H1H2H2
\s : 모든 공백문자, [\f\n\r\t\v] 와 같음
\S : 공백문자가 아닌 모든 문자, [^\f\n\r\t\v] 와 같음
\x : 16진수 값, \x0A (ASCII 10, 줄바꿈 문자, \n)
\0 : 8진수 값, \011 (ASCII 8로 \t)
\c : 컨트롤 문자, \cZ (Ctrl+Z)
포직스 문자 클래스 - 자바스크립트는 미지원
[: 로 시작, :] 로 끝난다.
[:alnum:] 모든 영숫자, [a-zA-Z0-9] 와 같다
[:alpha:] 모든 영문자, [a-zA-Z]
[:blank:] 빈칸(Space)이나 탭문자, [\t ]
[:cntrl:] ASCII 제어문자 (ASCII 0~31, 127번)
[:digit:] 모든 한자리 숫자, [0-9]
[:graph:] [:print:] 와 동일하나 빈칸(Space)은 제외
[:lower:] 모든 소문자, [a-z]
[:print:] 출력 가능한 모든 문자
[:punct:] [:alnum:] 이나 [:cntrl:] 가 포함되지 않은 모든 문자
[:space:] 빈칸을 포함한 모든 공백문자, [\f\n\r\t\v]
[:upper:] 모든 대문자, [A-Z]
[:xdigit:] 모든 16진수 숫자, [a-fA-F0-9]
+ : 문자 하나 이상
예문:
Send personal email to ben@forta.com. For question about a book use support@fora.com.
Fell free to send unsolicited email to spam@forta.com (wouldn't it be nice if ii were that simple, huh?).
검색어 : \w+@\w+\.\w+
결과:
ben@forta.com
support@fora.com
spam@forta.com
계정이나 도메인에 . 이 포함되는 경우
예문:
Send personal email to ben@forta.com or ben.forta@forta.com. For question about a book use support@fora.com.
If your message is urgent try ben@urgent.forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if ii were that simple, huh?).
검색어 : \w+@\w+\.\w+
결과:
ben@forta.com
forta@forta.com
support@fora.com
ben@urgent.forta
spam@forta.com
와 같이 .이 계정이나 도메인에 있는 경우는 찾지 못하는 문제가 있다. 그래서 아래와 같이 검색어를 수정해야만 한다.
검색어 : [\w.]+@[\w.]+\.\w+
결과:
ben@forta.com
ben.forta@forta.com
support@fora.com
ben@urgent.forta.com
spam@forta.com
(집합 안에 . 앞에 \를 생략해도 이스케이프 문자로 취급한다. 물론, . 대신 \. 로 고쳐써도 된다.)
* : 앞에 오는 문자가 없거나 '하나이상'
예문: (오타로 메일주소 앞에 . 찍음)
Hello, .ben@forta.com is my email address.
검색어 [\w.]+@[\w.]+\.\w+
결과 : .ben@forta.com (. 이 맨 앞에 오면 안되므로 아래 검색어 참조)
검색어 : \w+[\w.]*@[\w.]+\.\w+
결과 : ben@forta.com (오타는 무시하고 원하는 메일 주소만 찾는다)
? : 앞에 오는 문자 혹은 집합이 없거나 '하나'인 문자
예문:
The URL is http://www.forta.com/, to connect
securely use https://www.forta.com/ instead.
검색어 : http://[\w./]+
결과 : http://www.forta.com/
검색어 : https?://[\w./]+
결과:
http://www.forta.com/
https://www.forta.com/
예문:
"101","Ben","Forta"
"102","Jim","James"
"103","Roberta","Robertson"
"104","Bob","Bobson"
검색어 : \r\n\r\n
결과 : 없음 (빈줄을 못 찾음)
검색어 : [\r]?\n[\r]?\n (집합기호 안에 메타문자가 1개 오므로 집합문자는 생략 가능하나 적용범위 혼란을 방지하기 위해 일부 개발자는 이런 경우에도 집합기호를 사용한다)
결과 : 빈줄을 찾음
{} : 일치해야 하는 횟수 지정
{3} 바로 앞에 오는 문자나 문자집합이 3번 연속해서 일치
예문:
<BODY BGCOLOR="#336633" TEXT="#FFFFFF" MARGINEWIDTH="0" MARGINEHEIGHT="0" TOPMARGINE="0" LEFTMARGINE="0">
검색어 : #[0-9A-Fa-f]{6} (#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f] 보단 단순)
결과:
#336633
#FFFFFF
예문:
4/8/03
10-6-2004
2/2/2
01-01-01
검색어 : \d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
결과:
4/8/03
10-6-2004
01-01-01
이 검색어에서는 날짜가 맞는지 확인못함, 예로 54/67/9999 도 찾게 된다.
최소구간 찾기
최대구간 없이 최소값만 지정한다. (예, {3,} 최소 3번 일치 = 3번이상 일치)
예문:
1001: $496.80
1002: $1290.69
1003: $26.43
1004: $613.42
1005: $7.61
1006: $414.90
1006: $25.00
검색어 : \d+: \$\d{3,}\.\d{2}
결과:
1001: $496.80
1002: $1290.69
1004: $613.42
1006: $414.90
예문:
This offer is not available to customers
living in <B>AK</B> and <B>HI</B>
검색어 : <[Bb]>.*</[Bb]>
결과:
AK and HI
검색어 : <[Bb]>.*?</[Bb]>
결과:
AK
HI
(? 가 있으므로 구간을 최소화 한다) 그런데, <B>와 </B>는 왜 안 나오지?
\b : 단어의 시작이나 끝, 영숫자, 밑줄, \w와 일치하는 문자와 그외의 문자사이에 있는 위치와 일치한다.
예문:
The cat scattered his food all over the room.
검색어 : cat
결과:
cat
scattered
검색어 : /bcat/b
결과 : cat
예문:
The captain wore this cap ans cape proudly as
he sat listening to the recap of how his
crew saved the men from a capsized vessel.
검색어 : \bcap
결과:
cap
cap
cap
cap
검색어 : cap\b (cap 으로 끝나는 단어)
결과:
cap
cap
예문:
Please enter the nine-digit id as it appears on your color - coded pass-key.
검색어 : \B-\B (\B 는 특별히 단어 경계와 일치시키고 싶지 않을때 사용, \B\B 단어구분 문자로 둘러싸인 - 과 일치한다)
결과 : - (\B 메타문자를 활용해 잘못 쓰인 빈칸으로 둘러사인 -을 찾는다)
예문:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:difinitions= targetNamespace="http://tips.cf"
xmlns:impl="http://tips.cf" xmlns:intf="http://tips.cf"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
검색어 : <\?xml.*\?>
결과 :