정규식 사용하기
정규식이란 특정 문자열을 나타낼 때 쓰는 표현식으로 주로 문자열 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 만 해당됨)