Upload
zeheb
View
84
Download
0
Embed Size (px)
DESCRIPTION
Regular Expressions : JavaScript, VBScript &T-SQL. 차례. Mastering Regular Expressions JavaScript RegExp VBScript RegExp T-SQL RegExp. Mastering Regular Expressions. 정규표현식이란 ?. 텍스트의 패턴을 매치하기위해 사용되는 문장과 기호의 집합 2가지 규칙 가장 먼저 시작하는 매치가 우선된다 표준 수량자( quantifier) 는 탐욕스럽다 단순한 예 a cat - PowerPoint PPT Presentation
Citation preview
Regular Expressions : Regular Expressions : JavaScript, VBScript &T-SQLJavaScript, VBScript &T-SQL Regular Expressions : Regular Expressions : JavaScript, VBScript &T-SQLJavaScript, VBScript &T-SQL
2
차례차례
Mastering Regular ExpressionsMastering Regular Expressions
JavaScript RegExpJavaScript RegExp
VBScript RegExpVBScript RegExp
T-SQL RegExpT-SQL RegExp
3
Mastering Regular ExpressionsMastering Regular ExpressionsMastering Regular ExpressionsMastering Regular Expressions
4
정규표현식이란정규표현식이란 ??
텍스트의 패턴을 매치하기위해 사용되는 텍스트의 패턴을 매치하기위해 사용되는 문장과 기호의 집합문장과 기호의 집합22 가지 규칙가지 규칙
가장 먼저 시작하는 매치가 우선된다가장 먼저 시작하는 매치가 우선된다표준 수량자표준 수량자 ((quantifier)quantifier) 는 탐욕스럽다는 탐욕스럽다
단순한 예단순한 예aa
catcat순서대로 세개의 문자순서대로 세개의 문자cat, category, Cattycat, category, Catty
5
문자표현법문자표현법
문자약어 문자약어 \a - \a - 경고경고 , \b – , \b – 백스페이스백스페이스 , \n - , \n - 줄바꿈문자줄바꿈문자 , ,
\r - \r - 캐리지리턴 캐리지리턴 , \t – , \t – 일반탭일반탭 , \v – , \v – 수직탭수직탭
88 진수 이스케이프진수 이스케이프 \015\012 - CR/LF\015\012 - CR/LF
1616 진수 및 유니코드 이스케이프진수 및 유니코드 이스케이프\x0D\x0A – CR/LF\x0D\x0A – CR/LF
제어문자제어문자\cH – Control-H\cH – Control-H
6
문자클래스문자클래스 -1-1
일반클래스일반클래스[...] – [...] – 클래스내의 임의의문자클래스내의 임의의문자[^...] – [^...] – 부정형부정형 , , 열거되지 않은 문자에 매치열거되지 않은 문자에 매치 , , 클래스내에선 행시작이 아님클래스내에선 행시작이 아님
[Aa] – A or a[Aa] – A or a
gr[ae]y – grey or graygr[ae]y – grey or gray
[Cc]at – Cat or cat[Cc]at – Cat or cat
[^0-9] – [^0-9] – 숫자가 아님숫자가 아님q[^u] – q q[^u] – q 다음에 다음에 u u 가 아닌 어떤것에 매치가 아닌 어떤것에 매치
Iraq, IraqiIraq, Iraqi
7
문자클래스문자클래스 -2-2
문자범위문자범위[a-z] –a,b,c…,z[a-z] –a,b,c…,z
[A-Z], [0-9], [a-zA-Z0-9], [-a-z][A-Z], [0-9], [a-zA-Z0-9], [-a-z]
클래스약어클래스약어\w = [a-zA-Z0-9_], \W = [^\w]\w = [a-zA-Z0-9_], \W = [^\w]
\d = [0-9], \D = [^\d]\d = [0-9], \D = [^\d]
\s = [ \f\n\r\t\v], \S = [^\s]\s = [ \f\n\r\t\v], \S = [^\s]\W\w\w\w\w\w\W\W\w\w\w\w\w\W
\s\D\S\W\s\s\D\S\W\s
8
문자클래스문자클래스 -3-3
Dot (.) – Dot (.) – 임의의 문자임의의 문자일반적으로 영숫자일반적으로 영숫자 , , 공백공백 , , 탭탭 , , 특수문자특수문자newlinenewline 제외 제외 (( 옵션옵션 , , 엔진에 따라엔진에 따라 , , 윈윈 :\:\r\n, r\n, 유유 :\:\n)n)
클래스내에 클래스내에 . . 을 사용하면을 사용하면 [.] [.] 매타문자 아님매타문자 아님07.31.1973 07.31.1973
07.31.197307.31.1973
87899076311973788789907631197378
07[-./]31[-./]197307[-./]31[-./]1973
9
앵커및 위치표기용 메타문자앵커및 위치표기용 메타문자
행및 문자열시작 행및 문자열시작 : ^, \A – : ^, \A – 단어끝 과 단어끝 과 \\n n 사이사이행및 문자열의 끝 행및 문자열의 끝 : $, \Z, \z: $, \Z, \z
^,\^,\A A 와 와 $,\$,\ZZ 는 일반적으로 동일는 일반적으로 동일//m m 인경우엔 인경우엔 \\A, \ZA, \Z 는 문장시작는 문장시작 , , 끝끝폼 입력값검사시엔 대부분 폼 입력값검사시엔 대부분 ^…$ ^…$
매치시작위치매치시작위치 (( 이전매치끝위치이전매치끝위치 ) : \G) : \G
단어경계 단어경계 : \b, \B = [^\b], \<, \>: \b, \B = [^\b], \<, \>^cat$ - ^cat$ - 행시작 행시작 cat cat 행끝행끝^$ - ^$ - 빈행빈행
10
주석및 모드변경자주석및 모드변경자
다중행모드다중행모드 ((multi-line) : mmulti-line) : m^, $ ^, $ 이 이 newline newline 의 앞뒤에 매치의 앞뒤에 매치
단일행모드단일행모드 ((single-line) : ssingle-line) : sDot (.) Dot (.) 에 에 newline newline 을 포함을 포함
대소문자무시모드 대소문자무시모드 : i: i
공백무시모드 공백무시모드 : x: x
모드변경자 모드변경자 (?mod:…)(?mod:…)(?i)te(?-i)st – TEst , Test(o), teST, TEST(x)(?i)te(?-i)st – TEst , Test(o), teST, TEST(x)
주석 주석 (?#...) (?#...)
11
선택선택
선택 선택 : …|…: …|…둘중에 하나를 선택둘중에 하나를 선택Cat|cat = Cat or catCat|cat = Cat or cat = = (C|c)at(C|c)atJeffreyJeffrey
/Jeffrey|Jeffery//Jeffrey|Jeffery//Jeff(rey|ery)//Jeff(rey|ery)//Jeff(re|er)y//Jeff(re|er)y/
get|getvalue|set|setvalueget|getvalue|set|setvalue““setvalue” setvalue” 에 “에 “ set” set” 만 매치만 매치
위치바꿈위치바꿈\\bget(value)?|set(value)?\bbget(value)?|set(value)?\b\\b(get|set)(value)?\bb(get|set)(value)?\b
12
수량자수량자 -1-1
표준수량자 표준수량자 : : 탐욕스럽다 탐욕스럽다 (greedy)(greedy)* * : 0...N: 0...N? : 0,1 ? : 0,1 + : 1…N + : 1…N {n, n}, {n, }, {n}{n, n}, {n, }, {n}
[A-Za-z]*[A-Za-z]*colou?r - color or colourcolou?r - color or colour<a>.*</a><a>.*</a><a[^>]*> - <a[^>]*> - 속성포함 또는 포함않한 속성포함 또는 포함않한 <a> <a> 태그태그<a +href=“[^”]+” *> - href<a +href=“[^”]+” *> - href 속성만 갖는 속성만 갖는 <a> <a> 태그태그<a *(href=“[^”]+”)? *> <a *(href=“[^”]+”)? *>
13
수량자수량자 -2-2
느슨한 수량자느슨한 수량자 (lazy)(lazy)**?, ??, +?, {n, n}? – ?, ??, +?, {n, n}? – 가능하면 작은 문자열로 가능하면 작은 문자열로 매치매치
<a>.*?</a><a>.*?</a>
소유수량자소유수량자**+, ?+, ++, {n, n}+ - +, ?+, ++, {n, n}+ - 백트래킹을 하지 않음백트래킹을 하지 않음
14
백레퍼런스백레퍼런스
정규식내의 부분의 매치를 저장하고 정규식내의 부분의 매치를 저장하고 변수에 저장하기 위해 둥근괄호 변수에 저장하기 위해 둥근괄호 () () 사용사용\1,\2,\3, … , \9 \1,\2,\3, … , \9
(\s[a-zA-Z]*)\1(\s[a-zA-Z]*)\1
((^.{0,5})([0-9]+)\s*$) ((^.{0,5})([0-9]+)\s*$) 순서순서1 - ((^.{0,5})([0-9]+)\s*$)1 - ((^.{0,5})([0-9]+)\s*$)
2 - (^.{0,5})2 - (^.{0,5})
3 - ([0-9]+)3 - ([0-9]+)<([A-Z][A-Z0-9]*)[^>]*>.*?</\1><([A-Z][A-Z0-9]*)[^>]*>.*?</\1>
([A-C])x\1x\1 => AxAxAx, BxBxBx, AxBxCx([A-C])x\1x\1 => AxAxAx, BxBxBx, AxBxCx
([([abc]+) abc]+) ▶ ▶ \1, ([abc])+ \1, ([abc])+ \1▶ \1▶
\b(\W+)\s+\1\b => \b(\W+)\s+\1\b => 중복단어 수정중복단어 수정
15
그룹지정그룹지정 , , 캡처캡처
캡처캡처 // 그룹지정용괄호 그룹지정용괄호 : (…), $1,$2: (…), $1,$2<a[^>]*>(.*)</a> - <a[^>]*>(.*)</a> - 괄호의 내용이 괄호의 내용이 $1$1 에 캡처에 캡처
그룹지정전용괄호 그룹지정전용괄호 : (?:…): (?:…)캡처않함캡처않함 , , 백레퍼런스 사용안함 백레퍼런스 사용안함 => => 속도 속도 빠름빠름
이름이있는캡처 이름이있는캡처 : (?<name>…): (?<name>…)매치되는 내용을 이름으로 캡처매치되는 내용을 이름으로 캡처
원자그룹지정 원자그룹지정 : (?>…) – : (?>…) – 백트래킹 않음백트래킹 않음괄호를 하나의 토큰으로 취급괄호를 하나의 토큰으로 취급((x++) = (?>x)x++) = (?>x)
““1234567898” \1234567898” \d+6 (o) , \d++ (x)d+6 (o) , \d++ (x)
16
룩어라운드룩어라운드
실제로 문자열에 매치되는 것은 아님실제로 문자열에 매치되는 것은 아님룩어헤드 룩어헤드 ::
다음에 올 문자열을 포함해 매치여부 판단다음에 올 문자열을 포함해 매치여부 판단긍정형 긍정형 : (?=…) – : (?=…) – 다음에 문자열이 있는지다음에 문자열이 있는지부정형 부정형 : (?!...) – : (?!...) – 다음에 문자열이 없는지다음에 문자열이 없는지
룩비하인드룩비하인드긍정형 긍정형 : (?<=…) – : (?<=…) – 전에 문자열이 있는지전에 문자열이 있는지부정형 부정형 : (?<!...) – : (?<!...) – 전에 문자열이 없는지전에 문자열이 없는지
17
룩어라운드룩어라운드 -- 예제예제Jeffs -> Jeff’ss/\bJeffs\b/\bJeff’s\b/g=> s/\b(Jeff)(s)\b/$1’$2/g =>s/\bJeff(?=s\b)/\bJeff’/g => s/(?<=\bJeff)(?=s\b)/’/g – 문자열에 매치되는 것이 아니라 “ 위치” 매치됨s/(?=s\b)(?<=\bJeff)/’/g
숫자에 천단위 쉼표s/(?<=d)(?=(\d\d\d)+(?!\d))/,/g-> 1234Hz , 1980s , …
중복문자제거s/(\w)+\s\1/$1/g – “the the the” s/(\w)+\s(?=\1)//g
quit q(?=u) q(?=u)i – 항상 X
18
JavaScript RegExpJavaScript RegExpJavaScript RegExpJavaScript RegExp
19
정규식 선언정규식 선언
정규식생성자를 이용정규식생성자를 이용var rev = new RegExp(“s”,“gim”);var rev = new RegExp(“s”,“gim”);
g – g – 전체문장내모든매치전체문장내모든매치 , i – , i – 대소문자구분없음대소문자구분없음 , m , m – – 다중행 허용다중행 허용
정규식문자를 사용한 일반적 선언정규식문자를 사용한 일반적 선언var searchTermRE = /X1X4/gim;var searchTermRE = /X1X4/gim;
20
특수문자특수문자
\t, \n, \0(Null \t, \n, \0(Null 문자문자 ))
., ^, $., ^, $
A-Z, a-z, 0-9A-Z, a-z, 0-9
*, +, ?, *, +, ?,
\*, \+, \?, \$, \^ - \*, \+, \?, \$, \^ - 매타문자를 문자로매타문자를 문자로
21
예제예제
: lop, mop, bop, sop, pop, gop, top, fopvar re = /.op/;var re = /[blp]op/;var re = /[a-m]op/;var re = /[^blp]op/;var re = /[^a-m]op/;
: bonk,onk,bbonk,bbbonkvar re = /b?onk/;var re = /b*onk/;var re = /b+onk/;var re = /b{2}onk/;var re = /b{1,3}onk/;
22
ReExp.test(str)ReExp.test(str)
테스트될 문자열에 대해서 패턴에 테스트될 문자열에 대해서 패턴에 매치여부를 매치여부를 Boolean Boolean 으로 반환으로 반환
var re = new RegExp(“t$”);function Validate(en) {
return re.test(en);}function ShowPrompt() {
var en = prompt(“Type your text here.”);if (Validate(en) {
alert(“There is a match!”);}else {
alert(“There is no matchi!”);}
}
23
ReExp.exec(str)ReExp.exec(str)
매칭되는 문자를 모두 배열로 반환매칭되는 문자를 모두 배열로 반환function RegExpTest(){
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){ var src = "The rain in Spain falls mainly in the plain.";var re = /\w+/g; var arr;while ((arr = re.exec(src)) != null)
document.write(arr.index + "-" + arr.lastIndex + "\t" + arr);
}else{
alert("You need a newer version of JScript for this to work");}
}
24
String.search() MethodString.search() Method
매칭되는 문자의 첫위치를 반환매칭되는 문자의 첫위치를 반환매칭되는 문자가 없을 경우 매칭되는 문자가 없을 경우 -1 -1 을 반환을 반환/g /g 모드를 무시모드를 무시
function SearchDemo(){var r, re; var s = "The rain in Spain falls mainly in the plain.";re = /falls/i; r = s.search(re); return(r);
}
25
String.match() MethodString.match() Method
매칭되는 문자를 모두 배열로 반환매칭되는 문자를 모두 배열로 반환/g /g 모드에서도 실행모드에서도 실행
function checkPhoneNumber(phoneNo) { var re = /^\(\d\d\d\) \d\d\d-\d\d\d\d$/; if (phoneNo.match(re)) {
return true; } else {
return false; }
}
26
String.replace() MethodString.replace() Method
매치되는 문자를 지정된 문자로 변환매치되는 문자를 지정된 문자로 변환/g /g 모드에서도 실행모드에서도 실행
function autoCorrect(theString) { theString = theString.replace(/([abd-z])ei/gi,”$1ie”); return theString;
}
function ReplaceDemo(){var r, re; var ss = "The rain in Spain falls mainly in the plain.";re = /(\S+)(\s+)(\S+)/g; r = ss.replace(re, "$3$2$1"); return(r);
}
27
그룹그룹 , , 캡처캡처
정규식내에서 괄호를 정규식내에서 괄호를 \1, \2,...,\9 \1, \2,...,\9 로 로 대치하여 반복하여 사용할 수 있음대치하여 반복하여 사용할 수 있음정규식 괄호내의 패턴에 매치되는 문자를 정규식 괄호내의 패턴에 매치되는 문자를 $1, $2,.., $9 $1, $2,.., $9 로 받을수 있음로 받을수 있음
// somename.html.html -> somename.html
matchStr = /(\b\w+)\.(\w+)\.\2\b/g;FilesString.replace(matchStr, $1+'.'+$2);
28
VBScript RegExpVBScript RegExpVBScript RegExpVBScript RegExp
29
선언선언
생성생성Set re = new RegExpSet re = new RegExp
속성속성Pattern : Pattern : 정규식구문정규식구문IgnoreCase : IgnoreCase : 대소문자구분여부대소문자구분여부Global : Global : 전체문장의 모든매치전체문장의 모든매치
Set re = new RegExpre.Pattern = “[A-Z]\d”re.IgnoreCase = Truere.Global = False
30
매타문자매타문자
[…],[^…][…],[^…]
\t,\t,
\b,\B, \d,\D, \s,\S, \w,\W\b,\B, \d,\D, \s,\S, \w,\W
^,$^,$
*,+,?,{n, m}*,+,?,{n, m}
(…), (?:…), (?=…), (?!...)(…), (?:…), (?=…), (?!...)
……|…|…
31
RegExp.Test(string)RegExp.Test(string)
테스트될 문자열의 패턴 매치여부를 테스트될 문자열의 패턴 매치여부를 Boolean Boolean 으로 반환으로 반환
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
Function RegExpTest(patrn, strng)Dim regEx, retVal Set regEx = New RegExp regEx.Pattern = patrn regEx.IgnoreCase = False retVal = regEx.Test(strng) If retVal Then
RegExpTest = "One or more matches were found."Else
RegExpTest = "No match was found."End If
End Function
32
RegExp.Replace(string)RegExp.Replace(string)
패턴에 매치되는 문자를 다른문자로 바꿈패턴에 매치되는 문자를 다른문자로 바꿈캡처할수 있음캡처할수 있음
MsgBox(RegExpReplace(“John Smith"))
Function RegExpReplace(strng)Dim regEx, retVal Set regEx = New RegExp regEx.Pattern = “(\S+)(\s+)(\S+)” retVal = regEx.Replace(strng, “$3, $2$1”)
End Function
33
RegExp.Execute(string)RegExp.Execute(string)
Matches Matches 컬렉션을 반환컬렉션을 반환
Function RegExpTest(patrn, strng)Dim regEx, Match, Matches Set regEx = New RegExp regEx.Pattern = patrn regEx.IgnoreCase = True regEx.Global = True Set Matches = regEx.Execute(strng) For Each Match in Matches
RetStr = RetStr & "Match found at position "RetStr = RetStr & Match.FirstIndex & ". Match Value is RetStr = RetStr & Match.Value & "
NextRegExpTest = RetStr
End FunctionMsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
34
T-SQL RegEx T-SQL RegEx T-SQL RegEx T-SQL RegEx
35
지원지원
Like ‘A%’, like ‘a_’Like ‘A%’, like ‘a_’A.*, aA.*, a..
Like ‘[a-z]%’, like ‘[^abc]%’Like ‘[a-z]%’, like ‘[^abc]%’[a-z].* , [^abc].*[a-z].* , [^abc].*
PATINDEX(‘%ABC%’, ColNm)PATINDEX(‘%ABC%’, ColNm)패턴이 시작되는 처음 위치패턴이 시작되는 처음 위치 , , 없으면 없으면 0 0 을 을 반환반환
36
RegExp Object – RegExp Object – 생성생성Create Function dbo.regexObj(
@regexp varchar(1000),@global bit = 0,@ignoreCase bit = 0
)Returns Integer AsBegin
Declare @hr integerDeclare @objRegExp integerExecute @hr = xp_OACreate 'VBScript.RegExp', @objRegExp OUTPUTIf @hr <> 0 Begin
Return NULLEndExecute @hr = xp_OASetProperty @objRegExp, 'Pattern', @regexpIf @hr <> 0 Begin
Return NULLEndExecute @hr = xp_OASetProperty @objRegExp, 'Global', @globalIf @hr <> 0 Begin
Return NULLEndExecute @hr = xp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCaseIf @hr <> 0 Begin
Return NULLEndReturn @objRegExp
End
37
RegExp Object - TestRegExp Object - Test
CREATE FUNCTION dbo.regexObjTest(
@objRegExp integer,@source varchar(5000)
)RETURNS bit ASBEGIN
DECLARE @hr integerDECLARE @results bit
EXECUTE @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
IF @hr <> 0 BEGINRETURN NULL
END
RETURN @resultsENDGO
38
RegExp Object – ReplaceRegExp Object – Replace
CREATE FUNCTION dbo.regexObjReplace(
@objRegExp integer,@source varchar(5000),@replace varchar(1000)
)RETURNS varchar(1000) ASBEGIN
DECLARE @hr integerDECLARE @result varchar(5000)
EXECUTE @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 BEGINRETURN NULL
END
RETURN @resultENDGO
39
RegExp Object - RegExp Object - 예제예제
패턴에 매치여부패턴에 매치여부패턴에 매치되는 문자바꿈패턴에 매치되는 문자바꿈
•패턴에 매치여부Declare @regexp integerSet @regexp = dbo.regexpObj(‘[^a-z]’, 0, 1);Select * From AccountWhere odo.regexpObjTest(@regexp, colnm) = 1
•패턴에 매치되는 문자바꿈Declare @regexp integerSet @regexp = dbo.regexpObj(‘[^a-z]’, 1,1);Select dbo.regexpObjReplace(@regexp, colnm, ‘’) From Account
40
연습연습연습연습
41
정규식만들기정규식만들기
Com, net, org, co.kr Com, net, org, co.kr 을 포함한 도메인을 포함한 도메인A-Z, 0-9, - and _A-Z, 0-9, - and _
이메일주소이메일주소로그인 아이디로그인 아이디큰따옴표로 둘러싸인 문자열큰따옴표로 둘러싸인 문자열달러액수달러액수시각 시각 (9:19 (9:19 am, 12:30 pm)am, 12:30 pm)URLURLDatesDatesTimeTime
42
정규식이해정규식이해 -1-1
Cat, ^Cat, ^Cat$, ^$, ^Cat, ^Cat, ^Cat$, ^$, ^[Ss]mith, gr[ae]y[Ss]mith, gr[ae]y<H[123456]>, <H[1-6]>, <H[-1-6]><H[123456]>, <H[1-6]>, <H[-1-6]>[0-9A-Z_!.?], [^1-6] [0-9A-Z_!.?], [^1-6] q[^u]q[^u]
Iraqi Iraqian miqra qasida qintar qoph zaqqum Qantas Iraqi Iraqian miqra qasida qintar qoph zaqqum Qantas IraqIraq
07[-./]04[-./]76 , 07.04.7607[-./]04[-./]76 , 07.04.76gra|ey, gr(a|e)y , gr[ea]ygra|ey, gr(a|e)y , gr[ea]y^From|Subject|Date: , ^(From|Subject|Date):^From|Subject|Date: , ^(From|Subject|Date):cat, \<cat, cat\>, \<cat\>cat, \<cat, cat\>, \<cat\>Color|Colour, Colou?rColor|Colour, Colou?r(July|Jul) (fourth|4th|4) , (July?) (fourth|4(th)?)(July|Jul) (fourth|4th|4) , (July?) (fourth|4(th)?)
43
정규식이해정규식이해 -2-2
\<the the>\, \<the +the\>, \<([A-Za-z]+) +\1\>\<the the>\, \<the +the\>, \<([A-Za-z]+) +\1\>1980.11.11 , /filename\..../1980.11.11 , /filename\..../[ [ ]*, [ \t]*, [ *|]*, [ \t]*, [ *| *], [ *|\t*]*], [ *|\t*]\W\w\w\w\w\w\W \W\w\w\w\w\w\W \s\D\S\W\s \s\D\S\W\s /^$/ - /^$/ - 빈줄빈줄/^cat$/ - /^cat$/ - 한줄에 한줄에 "cat" "cat" 이란 문자만이란 문자만[Aa] – “A” [Aa] – “A” 또는 “또는 “ a”a”gr[ae]y - g gr[ae]y - g 다음 다음 r r 다음 다음 (a (a 또는 또는 e) e) 다음 다음 yy[-0-9] – “-” [-0-9] – “-” 또는 숫자또는 숫자[\d{1,3}\.]{3}\d{1,3}[\d{1,3}\.]{3}\d{1,3}\w+\.\w+\@\w+\-?\w+\.[a-z]{2,4}\w+\.\w+\@\w+\-?\w+\.[a-z]{2,4}
44
참고참고
정규 표현식 완전 해부와 실습 정규 표현식 완전 해부와 실습 - - 개정판개정판 www.regular-expressions.infowww.regular-expressions.info
JavaScriptJavaScript
VBScriptVBScript
여러웹사이트여러웹사이트