메뉴 건너뛰기

홈피디자인닷컴

2005.07.24 18:55

정규식의 개념

(*.138.65.73) 조회 수 13519 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print 수정 삭제
http://cafe.naver.com/q69/6938

정규식의 개념



  • 정규식은 복잡한 패턴매칭과 대치 규칙을 정의하는 문자열이다.

  • 정규식은 파일이나 문자열 내에 포함되어 있는 특별한 패턴(또는 특별한 조건을 만족하는 문자열)을 검색하기 위해 미리 정의된 다양한 특수 문자들의 조합이다.

  • 정규식은 니모닉(mnemonic)값으로 간략하게 표현되는 기호로 만들어진다. 예를 들면, 단일 문자열 .은 "임의의 단일 문자열과 매치된다."는 의미이고, 문자 +는 "하나또는 그이상의 앞선식"이라는 의미이다.


      정규식을 정확히 정의하려면, automata, regular language, finite state machine 등을 설명해야 합니다. 그냥 일반적으로는 패턴매칭을 위한 언어라고 넘어갈 수 있지만, 정규식으로 matching할 수 없는 패턴도 많고, 왜 정규식에 이런 연산자가 없을까 고민하기 시작하면, 모든 것이 모호해져버립니다.


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




















































^ (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, ... 등을 나타냄) 
 * 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 등이 해당) 
 * * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨) 
 * .* (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨) 
 * 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 중 하나) 
 * [?[\]] ('?', '[', '', ']' 중 하나) 


 



나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5