1 / 44

Regular Expressions : JavaScript, VBScript &T-SQL

Regular Expressions : JavaScript, VBScript &T-SQL. 차례. Mastering Regular Expressions JavaScript RegExp VBScript RegExp T-SQL RegExp. Mastering Regular Expressions. 정규표현식이란 ?. 텍스트의 패턴을 매치하기위해 사용되는 문장과 기호의 집합 2가지 규칙 가장 먼저 시작하는 매치가 우선된다 표준 수량자( quantifier) 는 탐욕스럽다 단순한 예 a cat

zeheb
Download Presentation

Regular Expressions : JavaScript, VBScript &T-SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Regular Expressions : JavaScript, VBScript &T-SQL

  2. 차례 • Mastering Regular Expressions • JavaScript RegExp • VBScript RegExp • T-SQL RegExp

  3. Mastering Regular Expressions

  4. 정규표현식이란? • 텍스트의 패턴을 매치하기위해 사용되는 문장과 기호의 집합 • 2가지 규칙 • 가장 먼저 시작하는 매치가 우선된다 • 표준 수량자(quantifier)는 탐욕스럽다 • 단순한 예 • a • cat • 순서대로 세개의 문자 • cat, category, Catty

  5. 문자표현법 • 문자약어 • \a - 경고, \b – 백스페이스, \n - 줄바꿈문자, • \r - 캐리지리턴 , \t – 일반탭, \v – 수직탭 • 8진수 이스케이프 • \015\012 - CR/LF • 16진수 및 유니코드 이스케이프 • \x0D\x0A – CR/LF • 제어문자 • \cH – Control-H

  6. 문자클래스-1 • 일반클래스 • [...] – 클래스내의 임의의문자 • [^...] – 부정형, 열거되지 않은 문자에 매치, 클래스내에선 행시작이 아님 • [Aa] – A or a • gr[ae]y – grey or gray • [Cc]at – Cat or cat • [^0-9] – 숫자가 아님 • q[^u] – q 다음에 u 가 아닌 어떤것에 매치 • Iraq, Iraqi

  7. 문자클래스-2 • 문자범위 • [a-z] –a,b,c…,z • [A-Z], [0-9], [a-zA-Z0-9], [-a-z] • 클래스약어 • \w = [a-zA-Z0-9_], \W = [^\w] • \d = [0-9], \D = [^\d] • \s = [ \f\n\r\t\v], \S = [^\s] • \W\w\w\w\w\w\W • \s\D\S\W\s

  8. 문자클래스-3 • Dot (.) – 임의의 문자 • 일반적으로 영숫자, 공백, 탭, 특수문자 • newline제외 (옵션, 엔진에 따라, 윈:\r\n, 유:\n) • 클래스내에 . 을 사용하면[.] 매타문자 아님 • 07.31.1973 • 07.31.1973 • 8789907631197378 • 07[-./]31[-./]1973

  9. 앵커및 위치표기용 메타문자 • 행및 문자열시작 : ^, \A – 단어끝 과 \n 사이 • 행및 문자열의 끝 : $, \Z, \z • ^,\A 와 $,\Z는 일반적으로 동일 • /m 인경우엔 \A, \Z는 문장시작, 끝 • 폼 입력값검사시엔 대부분 ^…$ • 매치시작위치(이전매치끝위치) : \G • 단어경계 : \b, \B = [^\b], \<, \> • ^cat$ - 행시작 cat 행끝 • ^$ - 빈행

  10. 주석및 모드변경자 • 다중행모드(multi-line) : m • ^, $ 이 newline 의 앞뒤에 매치 • 단일행모드(single-line) : s • Dot (.) 에 newline 을 포함 • 대소문자무시모드 : i • 공백무시모드 : x • 모드변경자 (?mod:…) • (?i)te(?-i)st – TEst , Test(o), teST, TEST(x) • 주석 (?#...)

  11. 선택 • 선택 : …|… • 둘중에 하나를 선택 • Cat|cat = Cat or cat = (C|c)at • Jeffrey • /Jeffrey|Jeffery/ • /Jeff(rey|ery)/ • /Jeff(re|er)y/ • get|getvalue|set|setvalue • “setvalue” 에 “set” 만 매치 • 위치바꿈 • \bget(value)?|set(value)?\b • \b(get|set)(value)?\b

  12. 수량자-1 • 표준수량자 : 탐욕스럽다 (greedy) • * : 0...N • ? : 0,1 • + : 1…N • {n, n}, {n, }, {n} • [A-Za-z]* • colou?r - color or colour • <a>.*</a> • <a[^>]*> - 속성포함 또는 포함않한 <a> 태그 • <a +href=“[^”]+” *> - href속성만 갖는 <a> 태그 • <a *(href=“[^”]+”)? *>

  13. 수량자-2 • 느슨한 수량자(lazy) • *?, ??, +?, {n, n}? – 가능하면 작은 문자열로 매치 • <a>.*?</a> • 소유수량자 • *+, ?+, ++, {n, n}+ - 백트래킹을 하지 않음

  14. 백레퍼런스 • 정규식내의 부분의 매치를 저장하고 변수에 저장하기 위해 둥근괄호 () 사용 • \1,\2,\3, … , \9 • (\s[a-zA-Z]*)\1 • ((^.{0,5})([0-9]+)\s*$) 순서 • 1 - ((^.{0,5})([0-9]+)\s*$) • 2 - (^.{0,5}) • 3 - ([0-9]+) • <([A-Z][A-Z0-9]*)[^>]*>.*?</\1> • ([A-C])x\1x\1 => AxAxAx, BxBxBx, AxBxCx • ([abc]+) ▶ \1, ([abc])+ ▶ \1 • \b(\W+)\s+\1\b => 중복단어 수정

  15. 그룹지정, 캡처 • 캡처/그룹지정용괄호 : (…), $1,$2 • <a[^>]*>(.*)</a> - 괄호의 내용이 $1에 캡처 • 그룹지정전용괄호 : (?:…) • 캡처않함, 백레퍼런스 사용안함 => 속도 빠름 • 이름이있는캡처 : (?<name>…) • 매치되는 내용을 이름으로 캡처 • 원자그룹지정 : (?>…) – 백트래킹 않음 • 괄호를 하나의 토큰으로 취급 • (x++) = (?>x) • “1234567898” \d+6 (o) , \d++ (x)

  16. 룩어라운드 • 실제로 문자열에 매치되는 것은 아님 • 룩어헤드 : • 다음에 올 문자열을 포함해 매치여부 판단 • 긍정형 : (?=…) – 다음에 문자열이 있는지 • 부정형 : (?!...) – 다음에 문자열이 없는지 • 룩비하인드 • 긍정형 : (?<=…) – 전에 문자열이 있는지 • 부정형 : (?<!...) – 전에 문자열이 없는지

  17. 룩어라운드-예제 • Jeffs -> Jeff’s • s/\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 RegExp

  19. 정규식 선언 • 정규식생성자를 이용 • var rev = new RegExp(“s”,“gim”); • g – 전체문장내모든매치, i – 대소문자구분없음, m – 다중행 허용 • 정규식문자를 사용한 일반적 선언 • var searchTermRE = /X1X4/gim;

  20. 특수문자 • \t, \n, \0(Null 문자) • ., ^, $ • A-Z, a-z, 0-9 • *, +, ?, • \*, \+, \?, \$, \^ - 매타문자를 문자로

  21. 예제 : lop, mop, bop, sop, pop, gop, top, fop var re = /.op/; var re = /[blp]op/; var re = /[a-m]op/; var re = /[^blp]op/; var re = /[^a-m]op/; : bonk,onk,bbonk,bbbonk var 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) • 테스트될 문자열에 대해서 패턴에 매치여부를 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) • 매칭되는 문자를 모두 배열로 반환 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() Method • 매칭되는 문자의 첫위치를 반환 • 매칭되는 문자가 없을 경우 -1 을 반환 • /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() Method • 매칭되는 문자를 모두 배열로 반환 • /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() Method • 매치되는 문자를 지정된 문자로 변환 • /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 로 받을수 있음 // somename.html.html -> somename.html matchStr = /(\b\w+)\.(\w+)\.\2\b/g; FilesString.replace(matchStr, $1+'.'+$2);

  28. VBScript RegExp

  29. 선언 • 생성 • Set re = new RegExp • 속성 • Pattern : 정규식구문 • IgnoreCase : 대소문자구분여부 • Global : 전체문장의 모든매치 Set re = new RegExp re.Pattern = “[A-Z]\d” re.IgnoreCase = True re.Global = False

  30. 매타문자 • […],[^…] • \t, • \b,\B, \d,\D, \s,\S, \w,\W • ^,$ • *,+,?,{n, m} • (…), (?:…), (?=…), (?!...) • …|…

  31. RegExp.Test(string) • 테스트될 문자열의 패턴 매치여부를 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) • 패턴에 매치되는 문자를 다른문자로 바꿈 • 캡처할수 있음 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) • 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 & " Next RegExpTest = RetStr End Function MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

  34. T-SQL RegEx

  35. 지원 • Like ‘A%’, like ‘a_’ • A.*, a. • Like ‘[a-z]%’, like ‘[^abc]%’ • [a-z].* , [^abc].* • PATINDEX(‘%ABC%’, ColNm) • 패턴이 시작되는 처음 위치, 없으면 0 을 반환

  36. RegExp Object – 생성 Create Function dbo.regexObj ( @regexp varchar(1000), @global bit = 0, @ignoreCase bit = 0 ) Returns Integer As Begin Declare @hr integer Declare @objRegExp integer Execute @hr = xp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT If @hr <> 0 Begin Return NULL End Execute @hr = xp_OASetProperty @objRegExp, 'Pattern', @regexp If @hr <> 0 Begin Return NULL End Execute @hr = xp_OASetProperty @objRegExp, 'Global', @global If @hr <> 0 Begin Return NULL End Execute @hr = xp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase If @hr <> 0 Begin Return NULL End Return @objRegExp End

  37. RegExp Object - Test CREATE FUNCTION dbo.regexObjTest ( @objRegExp integer, @source varchar(5000) ) RETURNS bit AS BEGIN DECLARE @hr integer DECLARE @results bit EXECUTE @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source IF @hr <> 0 BEGIN RETURN NULL END RETURN @results END GO

  38. RegExp Object – Replace CREATE FUNCTION dbo.regexObjReplace ( @objRegExp integer, @source varchar(5000), @replace varchar(1000) ) RETURNS varchar(1000) AS BEGIN DECLARE @hr integer DECLARE @result varchar(5000) EXECUTE @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace IF @hr <> 0 BEGIN RETURN NULL END RETURN @result END GO

  39. RegExp Object - 예제 • 패턴에 매치여부 • 패턴에 매치되는 문자바꿈 • 패턴에 매치여부 • Declare @regexp integer • Set @regexp = dbo.regexpObj(‘[^a-z]’, 0, 1); • Select * From Account • Where odo.regexpObjTest(@regexp, colnm) = 1 • 패턴에 매치되는 문자바꿈 • Declare @regexp integer • Set @regexp = dbo.regexpObj(‘[^a-z]’, 1,1); • Select dbo.regexpObjReplace(@regexp, colnm, ‘’) • From Account

  40. 연습

  41. 정규식만들기 • Com, net, org, co.kr 을 포함한 도메인 • A-Z, 0-9, - and _ • 이메일주소 • 로그인 아이디 • 큰따옴표로 둘러싸인 문자열 • 달러액수 • 시각 (9:19 am, 12:30 pm) • URL • Dates • Time

  42. 정규식이해-1 • Cat, ^Cat, ^Cat$, ^$, ^ • [Ss]mith, gr[ae]y • <H[123456]>, <H[1-6]>, <H[-1-6]> • [0-9A-Z_!.?], [^1-6] • q[^u] • Iraqi Iraqian miqra qasida qintar qoph zaqqum Qantas Iraq • 07[-./]04[-./]76 , 07.04.76 • gra|ey, gr(a|e)y , gr[ea]y • ^From|Subject|Date: , ^(From|Subject|Date): • cat, \<cat, cat\>, \<cat\> • Color|Colour, Colou?r • (July|Jul) (fourth|4th|4) , (July?) (fourth|4(th)?)

  43. 정규식이해-2 • \<the the>\, \<the +the\>, \<([A-Za-z]+) +\1\> • 1980.11.11 , /filename\..../ • [ ]*, [ \t]*, [ *| *], [ *|\t*] • \W\w\w\w\w\w\W • \s\D\S\W\s • /^$/ - 빈줄 • /^cat$/ - 한줄에 "cat" 이란 문자만 • [Aa] – “A” 또는 “a” • gr[ae]y - g 다음 r 다음 (a 또는 e) 다음 y • [-0-9] – “-” 또는 숫자 • [\d{1,3}\.]{3}\d{1,3} • \w+\.\w+\@\w+\-?\w+\.[a-z]{2,4}

  44. 참고 • 정규 표현식 완전 해부와 실습 - 개정판 • www.regular-expressions.info • JavaScript • VBScript • 여러웹사이트

More Related