프로그래밍

정규식 사용하기

루시르 2008. 12. 9. 09:43

정규식이란 특정 문자열을 나타낼 때 쓰는 표현식으로 주로 문자열 Parsing할 때 많이 쓰입니다.

vi에서 search할 때 쓸 수도 있고 EditPlus나 UltraEdit에서도 검색할 때 정규식을 지원하더군요.

XML에서 Parsing할 때도 쓰이고.. 그럼 정규식에 어떤 표현이 있는지 알아볼까요..?-_-

 

정규식에 사용되는 특수문자의 의미

 

^ (caret)

 

라인의 처음이나 문자열의 처음을 표시

 

^aaa (문자열의 처음에 aaa

 

포함하면 , 그렇지 않으면 거짓)

 

$ (dollar)

 

라인의 끝이나 문자열의 끝을 표시

 

aaa$ (문자열의 끝에 aaa를 포함하면

 

, 그렇지 않으면 거짓)

 

. (period)

 

임의의 한 문자를 표시

 

^a.c (문자열의 처음에 abc, adc, aZc

 

등은 참, aa 는 거짓)

 

 

 

a..b$ (문자열의 끝에 aaab, abbb,

 

azzb 등을 포함하면 참)

 

[] (bracket)

 

문자의 집합이나 범위를 나타냄,

 

문자 사이의 "-"는 범위를 나타냄

 

[]내에서 "^"이 선행되면 not을 나타냄

 

{} (brace)

 

{} 내의 숫자는 직전의 선행문자가

 

나타나는 횟수 또는 범위를 나타냄

 

a{3} ('a' 3번 반복인 aaa만 해당됨)

 

* (asterisk)

 

"*" 직전의 선행문자가 0번 또는 여러번

 

나타나는 문자열

 

ab*c ('b' 0번 또는 여러번

 

포함하므로 ac, ackdddd, abc, abbc,

 

abbbbbbbc )

 

+

 

"+" 직전의 선행문자가 1번 이상

 

나타나는 문자열

 

ab+c ('b' 1번 또는 여러번

 

포함하므로 abc, abckdddd, abbc,

 

abbbbbbbc , ac는 안됨)

 

?

 

"?" 직전의 선행문자가 0번 또는 1

 

나타나는 문자열

 

ab?c ('b' 0번 또는 1번 포함하므로

 

abc, abcd 만 해당됨)

 

()

 

(parenthesis)

 

()는 정규식내에서 패턴을 그룹화 할 때

 

사용

 

 

| (bar)

 

or를 나타냄

 

a|b|c (a, b, c 중 하나, [a-c]

 

와 동일함)

 

\

 

(backslash)

 

위에서 사용된 특수 문자들을

 

정규식내에서 문자로 취급하고 싶을 때

 

'\'선행시켜서 사용하면됨

 

filename\.ext ("filename.ext"

 

나타냄).

정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함

위의 정규식 연산자 가운데 vi에서는 지원하지 않는 연산자가 있습니다. vi의 경우 +연산자도

없습니다. regular expression library에 따라 지원하는 연산자의 종류가 상당히 다릅니다. 요즘은

perl-style regular expression이 표준으로 자리잡아가는 것이 대체적인 추세이고, perl regular

expression은 가장 복합하고 기능이 많은 편입니다.

 

 

·                       [abc] (a, b, c 중 어떤 문자, "[a-c]."과 동일)

 

·                       [Yy] (Y 또는 y)

 

·                       [A-Za-z0-9] (모든 알파벳과 숫자)

 

·                       [-A-Z]. ("-"(hyphen)과 모든 대문자)

 

·                       [^a-z] (소문자 이외의 문자)

 

·                       [^0-9] (숫자 이외의 문자)

 

·                       [[:digit:]] ([0-9]와 동일)

 

·                       a{3,} ('a' 3번 이상 반복인 aaa, aaaa, aaaa, ... 등을 나타냄



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 등이 해당)


       (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨)

       (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨)

       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 )

 

·                       ab+ ('b' 1번 또는 여러번 포함하므로 ab, abccc, abb, abbbbbbb )

 

·                       like.+ (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely,

 

             liker, likelihood , 그러나 like는 해당안됨)

 

·                       [A-Z]+ (대문자로만 이루어진 문자열)

 

·                       yes|Yes (yes Yes 중 하나, [yY]es와 동일함)

 

·                       korea|japan|chinese (korea, japan, chinese 중 하나)

 

·                       [\?\[\\\]] ('?', '[', '\', ']' 중 하나

 

·                        a{3,5} (aaa, aaaa, aaaaa 만 해당됨)