1. ์๊ฐ ¶
๋ฆฌ๋
์ค์ ๊ฐ์ ์ ๋์ค์ ํด๋ก ์ด์์ฒด์ ๋ฅผ ํ๋ค๋ณด๋ฉด ๋ฐ๋์ ์ตํ์ผ ํ ๊ฒ๋ค์ด ๋ช๊ฐ์ง ์กด์ฌํ๋ค.
์ ๊ท์์ด๋ผ๋ ๊ฒ๋ ๊ทธ์ค์ ํ๊ฐ์ง์ด๋ค.
๋์ถฉ ์ฉ๋๋ฅผ ์ ์ด๋ณด์๋ฉด MS์์คํ ์์์ *(asterix)๋ฌธ์์ ๊ฐ์ ์ฉ๋๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
๊ฑฐ์ ๋๋ถ๋ถ์ ์ ๋์ค ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ท์์ ์ฌ์ฉ์ ์ง์ํ๋ค. ์ผ๋จ ๋ฐฐ์ฐ๋ฉด ์ฐ์์ด ๋๋จํ์ง๋ง
์ตํ๊ธฐ ๊ท์ฐฎ๋ค. -.-;
์ ๊ท์์ด๋ผ๋ ๊ฒ๋ ๊ทธ์ค์ ํ๊ฐ์ง์ด๋ค.
๋์ถฉ ์ฉ๋๋ฅผ ์ ์ด๋ณด์๋ฉด MS์์คํ ์์์ *(asterix)๋ฌธ์์ ๊ฐ์ ์ฉ๋๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
์ตํ๊ธฐ ๊ท์ฐฎ๋ค. -.-;
2.1. Ch1 Introduction to Regular Expressions ¶
- ^(caret) : ์์์ ์๋ฏธํจ. ^cat์ cat์ผ๋ก ์์ํ๋ ๋ฌธ์...(cats,cater,caterer...).in the line rather real text
- $(dollar) : ๋์ ์๋ฏธํจ. cat$์ cat์ผ๋ก ๋๋๋ ๋ฌธ์ ...(blackcat, whitecat, ....) in the line rather real text
- [](Character Class) : seperaete ํ๋ฉด seperate, seperete ๋ชจ๋๋ฅผ ํฌํจํ๋ค.
- . (dot) : ์ด๋ค ๋ฌธ์๋ ๊ธฐํธ๋ ํด๋น๋๋ค. 03.19.76 ํ๋ฉด 03/19/76,03-19-76,03.19.76 ๋ฑ์ด ํด๋น๋๋ค.
(OR) : ์ฌ๋ฌ๊ฐ์ ์์ ํ๊ฐ์ ์์ผ๋ก ํฉ์ฑํ ์ ์๋ค. []์์์๋ ์ด ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํฌ ๋ฟ์ด๋ค. greay, grey|gray,gr(a|e)y ๋ ๊ฐ๋ค. - ()(parentheses) : a(a|b)cde ํ๋ฉด aacde, abcde ๋๋ค ํด๋น ๋๋ค. bํ๋ฉด | ๋ฅผ ๋ฌธ์๋ก ์ฒ๋ฆฌ ํ์ง๋ง (a|b) ๋ก ()๋ฅผ ์์ด ์ฃผ๋ฉด |๋ฅผ OR๋ก ํด์ํ๋ค.
- -i(option) : ๋์๋ฌธ์ ๊ตฌ๋ถ์ ์ํ๋ค. ์)egrep -i '^(From|Subject|Date): ' mailbox
- \< : ๋จ์ด๊ฐ ์์๋๋ ์ง์
- \> : ๋จ์ด๊ฐ ๋๋๋ ์ง์
- ? : one optional, ? ์์ ์๋ ๊ธ์๊ฐ ์์ด๋ ๋๊ณ ์์ด๋ ๋๋ค. colour ํ๋ฉด color, colur ๋ชจ๋ ๋๋ค.
- * : ? ๊ฐ ์ฌ๋ฌ๊ฐ(์์์ ๊ฐ์) ์๋ ํจ๊ณผ (์๋๊ฒ๋ ํฌํจ)
- + : ? ๊ฐ ์ฌ๋ฌ๊ฐ(์์์ ๊ฐ์) ์๋ ํจ๊ณผ
3. ์ ๊ท์ ํ ๋ด์ฉ ¶
(1) ^ (caret) : ๋ผ์ธ์ ์ฒ์์ด๋ ๋ฌธ์์ด์ ์ฒ์์ ํ์ ์ : ^aaa (๋ฌธ์์ด์ ์ฒ์์ aaa๋ฅผ ํฌํจํ๋ฉด ์ฐธ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฑฐ์ง) (2) $ (dollar) : ๋ผ์ธ์ ๋์ด๋ ๋ฌธ์์ด์ ๋์ ํ์ ์ : aaa$ (๋ฌธ์์ด์ ๋์ aaa๋ฅผ ํฌํจํ๋ฉด ์ฐธ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฑฐ์ง) (3) . (period) : ์์์ ํ ๋ฌธ์๋ฅผ ํ์ ์ : ^a.c (๋ฌธ์์ด์ ์ฒ์์ abc, adc, aZc ๋ฑ์ ์ฐธ, aa ๋ ๊ฑฐ์ง) a..b$ (๋ฌธ์์ด์ ๋์ aaab, abbb, azzb ๋ฑ์ ํฌํจํ๋ฉด ์ฐธ) (4) [] (bracket) : ๋ฌธ์์ ์งํฉ์ด๋ ๋ฒ์๋ฅผ ๋ํ๋, ๋ ๋ฌธ์ ์ฌ์ด์ "-"๋ ๋ฒ์๋ฅผ ๋ํ๋ []๋ด์์ "^"์ด ์ ํ๋๋ฉด not์ ๋ํ๋ ์ด์ธ์๋ "๋ฌธ์ํด๋์ค"๋ฅผ ํฌํจํ๋ [:๋ฌธ์ํด๋์ค:]์ ํํ๊ฐ ์๋ค. ์ฌ๊ธฐ์์ "๋ฌธ์ํด๋์ค"์๋ alpha, blank, cntrl, digit, graph, lower, print, space, uppper, xdigit๊ฐ ์๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ C์ธ์ด์ <ctype.h>๋ฅผ ์ฐธ์กฐํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด [:digit:]๋ [0-9]์ [:alpha:]๋ [A-Za-z]์ ๋์ผํ๋ค. ์ด์ธ์ [:<:]์ [:>:]๋ ์ด๋ค ๋จ์ด(์ซ์, ์ํ๋ฒณ, '_'๋ก ๊ตฌ์ฑ๋จ)์ ์์๊ณผ ๋ ์ ๋ํ๋ธ๋ค. ์ : [abc] (a, b, c ์ค ์ด๋ค ๋ฌธ์, "[a-c]."๊ณผ ๋์ผ) [Yy] (Y ๋๋ y) [A-Za-z0-9] (๋ชจ๋ ์ํ๋ฒณ๊ณผ ์ซ์) [-A-Z]. ("-"(hyphen)๊ณผ ๋ชจ๋ ๋๋ฌธ์) [^a-z] (์๋ฌธ์ ์ด์ธ์ ๋ฌธ์) [^0-9] (์ซ์ ์ด์ธ์ ๋ฌธ์) [[:digit:]] ([0-9]์ ๋์ผ) (5) {} (brace) : {} ๋ด์ ์ซ์๋ ์ง์ ์ ์ ํ๋ฌธ์๊ฐ ๋ํ๋๋ ํ์ ๋๋ ๋ฒ์๋ฅผ ๋ํ๋ ์ : a{3} ('a'์ 3๋ฒ ๋ฐ๋ณต์ธ aaa๋ง ํด๋น๋จ) a{3,} ('a'๊ฐ 3๋ฒ ์ด์ ๋ฐ๋ณต์ธ aaa, aaaa, aaaa, ... ๋ฑ์ ๋ํ๋) a{3,5} (aaa, aaaa, aaaaa ๋ง ํด๋น๋จ) ab{2,3} (abb์ abbb ๋ง ํด๋น๋จ) [0-9]{2} (๋ ์๋ฆฌ ์ซ์) doc[7-9]{2} (doc77, doc87, doc97 ๋ฑ์ด ํด๋น) [^Zz]{5} (Z์ z๋ฅผ ํฌํจํ์ง ์๋ 5๊ฐ์ ๋ฌธ์์ด, abcde, ttttt ๋ฑ์ด ํด๋น) .{3,4}er ('er'์์ ์ธ ๊ฐ ๋๋ ๋ค ๊ฐ์ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด์ด๋ฏ๋ก Peter, mother ๋ฑ์ด ํด๋น) (6) * (asterisk) : "*" ์ง์ ์ ์ ํ๋ฌธ์๊ฐ 0๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ๋ํ๋๋ ๋ฌธ์์ด ์ : ab*c ('b'๋ฅผ 0๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ํฌํจํ๋ฏ๋ก ac, ackdddd, abc, abbc, abbbbbbbc ๋ฑ) * (์ ํ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์์์ ๋ฌธ์์ด ๋ฐ ๊ณต๋ฐฑ ๋ฌธ์์ด๋ ํด๋น๋จ) .* (์ ํ๋ฌธ์๊ฐ "."์ด๋ฏ๋ก ํ๋ ์ด์์ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด, ๊ณต๋ฐฑ ๋ฌธ์์ด์ ์๋จ) ab* ('b'๋ฅผ 0๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ํฌํจํ๋ฏ๋ก a, accc, abb, abbbbbbb ๋ฑ) a* ('a'๋ฅผ 0๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ํฌํจํ๋ฏ๋ก k, kdd, sdfrrt, a, aaaa, abb, ๊ณต๋ฐฑ๋ฌธ์์ด ๋ฑ) doc[7-9]* (doc7, doc777, doc778989, doc ๋ฑ์ด ํด๋น) [A-Z].* (๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด) like.* (์ง์ ์ ์ ํ๋ฌธ์๊ฐ '.'์ด๋ฏ๋ก like์ 0 ๋๋ ํ๋ ์ด์์ ๋ฌธ์๊ฐ ์ถ๊ฐ๋ ๋ฌธ์์ด์ด ๋จ, like, likely, liker, likelihood ๋ฑ) (7) + (asterisk) : "+" ์ง์ ์ ์ ํ๋ฌธ์๊ฐ 1๋ฒ ์ด์ ๋ํ๋๋ ๋ฌธ์์ด ์ : ab+c ('b'๋ฅผ 1๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ํฌํจํ๋ฏ๋ก abc, abckdddd, abbc, abbbbbbbc ๋ฑ, ac๋ ์๋จ) ab+ ('b'๋ฅผ 1๋ฒ ๋๋ ์ฌ๋ฌ๋ฒ ํฌํจํ๋ฏ๋ก ab, abccc, abb, abbbbbbb ๋ฑ) like.+ (์ง์ ์ ์ ํ๋ฌธ์๊ฐ '.'์ด๋ฏ๋ก like์ ํ๋ ์ด์์ ๋ฌธ์๊ฐ ์ถ๊ฐ๋ ๋ฌธ์์ด์ด ๋จ, likely, liker, likelihood ๋ฑ, ๊ทธ๋ฌ๋ like๋ ํด๋น์๋จ) [A-Z]+ (๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด) (8) ? (asterisk) : "?" ์ง์ ์ ์ ํ๋ฌธ์๊ฐ 0๋ฒ ๋๋ 1๋ฒ ๋ํ๋๋ ๋ฌธ์์ด ์ : ab?c ('b'๋ฅผ 0๋ฒ ๋๋ 1๋ฒ ํฌํจํ๋ฏ๋ก abc, abcd ๋ง ํด๋น๋จ) (9) () (parenthesis) : ()๋ ์ ๊ท์๋ด์์ ํจํด์ ๊ทธ๋ฃนํ ํ ๋ ์ฌ์ฉ (10) | (bar) : or๋ฅผ ๋ํ๋ ์ : a|b|c (a, b, c ์ค ํ๋, ์ฆ [a-c]์ ๋์ผํจ) yes|Yes (yes๋ Yes ์ค ํ๋, [yY]es์ ๋์ผํจ) korea|japan|chinese (korea, japan, chinese ์ค ํ๋) (11) \ (backslash) : ์์์ ์ฌ์ฉ๋ ํน์ ๋ฌธ์๋ค์ ์ ๊ท์๋ด์์ ๋ฌธ์๋ฅผ ์ทจ๊ธํ๊ณ ์ถ์ ๋ '\'๋ฅผ ์ ํ์์ผ์ ์ฌ์ฉํ๋ฉด๋จ ์ : filename\.ext ("filename.ext"๋ฅผ ๋ํ๋) [\?\[\\\]] ('?', '[', '\', ']' ์ค ํ๋) ์ ๊ท์์์๋ ์์์ ์ธ๊ธํ ํน์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ์ผ๋ฐ ๋ฌธ์๋ก ์ทจ๊ธํจ ์ ๊ท์์ Unix์ ๋ํ์ ์ธ ์ ํธ๋ฆฌํฐ์ธ vi, emacs, ed, sed, awk, grep, egrep ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ค. ๋ค์์ grep์์ ์ ๊ท์์ ํ์ฉํ ์๋ฅผ ๋ณด์ฌ ์ฃผ๊ณ ์๋ค. (1) $ ๋ช ๋ น์ด | grep '์ ๊ท์' <= ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ๋ฅผ grep์ด ์ ๋ ฅ๋ฐ์ ์ ๊ท์์ ์ด์ฉํ์ฌ ํจํด์ ์ฐพ์๋ ์ : $ who | grep 'hgkim' <= hgkim์ด๋ผ๋ ์ฌ์ฉ์๊ฐ login ํด ์๋์ง๋ฅผ ์์๋ด $ ls -al | grep '^d.*' <= ls -al ์ ๊ฒฐ๊ณผ 'd'๋ก ์์ํ๋ ๋ผ์ธ(์ฆ ๋๋ ํ ๋ฆฌ๋ค) ๋ง์ ์ถ๋ ฅ $ ls -al | grep '^d.*' <= ls -al ์ ๊ฒฐ๊ณผ 'd'๋ก ์์ํ๋ ๋ผ์ธ(์ฆ ๋๋ ํ ๋ฆฌ๋ค) ๋ง์ ์ถ๋ ฅ $ ls -al | grep '^[^d]..x..x..x' <= ๋๋ ํ ๋ฆฌ๋ ์ ์ธํ๊ณ ("[^d]") ๋๊ตฌ๋ ์คํ๊ฐ๋ฅํ ํ์ผ("..x..x..x")๋ค ์ฐพ๊ธฐ (2) $ grep '์ ๊ท์' ํ์ผ์ด๋ฆ <= ํ์ผ์ ์ ๋ ฅ๋ฐ์ ์ ๊ท์์ ์ด์ฉํ์ฌ ํจํด์ ์ฐป์๋ ์: $ grep 'telnet' /etc/inetd.conf ์ด์ธ์ ๋ช ๋ น์ด๋ค๋ grep๊ณผ ์ ์ฌํ ํํ๋ก ์ด์ฉ๋๋ค. ๋ฐ๋ผ์ ์ ๊ท์์ ์ ์ด์ฉํ๋ฉด ์ ๋์ค์ ํ์ฉ์ด ๋ฐฐ๊ฐ ๋ ๊ฒ์ด๋ค. PHP์์๋ ์ ๊ท์๊ณผ ๊ด๋ จํ์ฌ ๋ค์์ ๋ค๊ฐ์ง ํจ์๋ฅผ ์ ๊ณตํ๋ค. int ereg(string givenPattern, string givenString, array matched); - givenString์ "string1stringAstring2stringBstring3 ... string9stringI" ๋ก ์ฃผ์ด์ ธ ์๋ค๊ณ ํ์. ์ด๋ stringA, stringB, ... , stringI๋ NULL ์ด์ด๋ ์๊ด์ด ์๋ค(์ฆ givenString์ "string1string2string3 ... string9" ์ธ ๊ฒฝ์ฐ์). - givenString์ด ์์ ๊ฐ์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ, givenPattern์ "(pattern1)stringA(pattern2)stringB(pattern3) ... (pattern9)stringI"๋ก ์ ๋ ฅํ์ฌ์ผ ํ๋ค. ์ฆ pattern1, pattern2, ..., pattern9๋ ๊ฐ๊ฐ string1, string2, ... , string9์์ ์ฐพ๊ณ ์ํ๋ ์ ๊ท์์ธ ๊ฒ์ด๋ค. - ์ด๋ pattern1์ด string1์์ ๋ฐ๊ฒฌํ ํจํด์ $matched[1]์ ์ ์ฅ๋๊ณ , pattern2๊ฐ string2์์ ๋ฐ๊ฒฌํ ํจํด์ $matched[2]์ ์ ์ฅ๋๊ณ , ..., pattern9๊ฐ string9์์ ๋ฐ๊ฒฌํ ํจํด์ $matched[9]์ ์ ์ฅ๋๋ค. PHP3์ ๊ฒฝ์ฐ ereg์์๋ ์ต๋ 9๊ฐ ๊น์ง์ pattern์ ์ฐพ์ ์ ์๋๋ก ์ค์ ๋์ด ์์์ ์ ์ํ์. - ๊ทธ๋ฆฌ๊ณ $matched[0]์๋ $matched[1]stringA$matched[2]stringB ... $matched[9]stringI๊ฐ ์ ์ฅ๋๋ค. - ereg๊ฐ ๋ฐํํ๋ ๊ฐ์ $matched[0]์ ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ฐ์์ด๋ค. - ereg๋ case sensitive - eregi๋ case insensitive ์1 : ์ฝ๋ => print(ereg ("(.*)ef([abc].*)","abcdefabc",$matched)); print("<br>"); while (list($a,$b)=each($matched)) if ($b) print("$a, $b <br>"); ๊ฒฐ๊ณผ => 9 0, abcdefabc 1, abcd 2, abc ์2 : ์ฝ๋ => print(ereg ("(.*)d(.*)e(.*)qrs(.*)","abcdefghijklmnopqrstuvwxyz",$matched)); print("<br>"); while (list($a,$b)=each($matched)) if ($b) print("$a, $b <br>"); ๊ฒฐ๊ณผ => 26 0, abcdefghijklmnopqrstuvwxyz 1, abc 3, fghijklmnop 4, tuvwxyz ์ 3 : ์ฝ๋ => $date="1999-11-17"; if (ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) print("$regs[3].$regs[2].$regs[1]"); else print("Invalid date format: $date"); ๊ฒฐ๊ณผ => 17.11.1999 ์ 4 : ์ฝ๋ => $joomin="711011-1234567"; if (ereg("([0-9]{2})([01]{1}[09]{1}[0-3]{1}[0-9]{1})-([12]{1}[0-9]{6})",$date, $regs)) print("Valid"); else print("Invalid format: $joomin"); int eregi(string givenPattern, string givenString, array matched); - ereg์ 'case insensitive' ๋ฒ์ ผ ์ : ์ฝ๋ => $email="xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr"; eregi("(^[_\.0-9a-z-]+)@(([0-9a-z][0-9a-z-]+\.)+)([a-z]{2,3}$)",$email,$matched); while (list($a,$b)=each($matched)) if ($b) print("$a, $b <br>"); ๊ฒฐ๊ณผ => 0, xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr 1, xs9_tx-abc.yyy_c 2, cne.kyungsung.ac. 3, ac. 4, kr ์ฝ๋ => eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email,$matched); while (list($a,$b)=each($matched)) if ($b) print("$a, $b <br>"); ๊ฒฐ๊ณผ => 0, xs9_tx-abc.yyy_c@cne.kyungsung.ac.kr 1, ac. string ereg_replace(string givenPattern, string replacementPattern, string givenString); - givenString์์ givenPattern์ ๋ถํฉํ๋ ํ ์คํธ(matched text)๋ฅผ ์ฐพ์์, replacementPattern์ผ๋ก ๋์ฒด - givenPattern์ด "(ํจํด)"์ผ๋ก ๋ฌถ์ธ ๋ฌธ์์ด๋ค์ ํฌํจํ๊ณ ์์ผ๋ฉด, replacementPattern์๋ ์ด์ ๋์ํ๋ "\\digit(๋ฌธ์์ด)" ํํ์ ๋ฌธ์์ด๋ค์ ํฌํจํ๊ณ ์์ด์ผ ํ๋ค(digit๋ 0, 1, ... ,9 ์ค ํ๋). ๊ทธ๋ฆฌ๊ณ givenString์ "(ํจํด)"์ ์ด์ฉํด ์ฐพ์ ๊ฒฐ๊ณผ๋ค์ "\\digit(๋ฌธ์์ด)"์ ์๋ "๋ฌธ์์ด"๋ค๋ก ๋์ฒดํ๊ฒ ๋๋ค. "\\0" ๋ givenString ์ ์ฒด์ ๋ํด "(ํจํด)"์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฉํ ๋ ์ด์ฉ๋๋ค. - ๋ณ๊ฒฝ๋ ๋ฌธ์์ด์ ๋ฆฌํด - case sensitive ์ : ์ฝ๋ => $string = "This is a test"; print(ereg_replace(" is", " was",$string)); print("<br>"); print(ereg_replace("( )is","\\1was",$string)); print("<br>"); print(ereg_replace("(( )is)","\\2was",$string)); print("<br>"); print(ereg_replace("(( )is)(( )a)(( )test)", "\\1was\\2an\\3exam",$string)); ๊ฒฐ๊ณผ => "This was a test"; "This was a test"; "This was a test"; "This was an exam"; ์ 2 : redundant whitespace ์์ ๊ธฐ ์ฝ๋ => $str ="~ s/\s+/ /g"; $str = eregi_replace("[[:space:]]+", " ", $str); print("$str<br>"); ๊ฒฐ๊ณผ => ~ s/\s+/ /g string eregi_replace(string givenPattern, string replacementPattern, string givenString); - ereg_replace์ 'case insensitive' ๋ฒ์ ผ