KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Your mode of life will be changed for the better because of good news soon.
FrontPage › RegularExpression
정규표현식에 관하여 설명합니다.

목차

1 정규표현식이란
1.1 정규표현식의 사용
2 관련 서적
3 관련 링크
4 Tips
5 Utility

1 정규표현식이란

  • Command 라인상에서 확장자에 상관없이 abc 로 시작하는 파일이름을 알고 싶을때 dir abc.* 와 같은 식으로 표현을 합니다. 여기에서 * 표현이 everything을 표현하는 정규표현식의 일종입니다.
    • ^는 문자열의 처음, $는 문자열의 마지막, + 는 하나이상의 문자, * 는 0 개이상의 문자 의미입니다. 이외에도 상당히 많습니다.
    • 정규표현식은 문자열이 패턴에 매칭되는가를 판단하는 용도로 주로 사용합니다.
      • 예를 들어서 a+def 라는 정규표현식에서 aaadef 는 매칭되지만 def 는 매칭되지 않습니다.
  • 정규표현식은 Regular Expression 이라는 말을 일본사람들이 한문화 한것입니다. 정규표현식은 Automata 이론에서 공부하게 되고, Compiler 이론에서 많이 사용합니다. 컴파일러를 만들때 사용하는 도구인 Lex 에서도 소스코드에서 Identifier, Reserved워드등의 지정된 패턴을 찾기 위해서 정규표현식을 사용합니다.

1.1 정규표현식의 사용

  • 정규표현식은 문서내에서 어떠한 패턴을 찾고 그내용을 변경하는 용도로 가장 많이 사용합니다.
    • vi 에디터로 편집을 할때 2번 라인부터 4번라인까지 제일처음 줄에 공란을 4개 집어 넣어야 할 경우가 생깁니다. 이때 다음과 같이 사용하면 편합니다. 2,4s/^/ /g
    • LaTeX에서 description environment로 되어 있는 것을 한번에 itemize로 바꾸고 싶을때 perl을 이용한다면 다음과 같이 쉽게 할 수 있습니다. 의미는 'global(g)하게 substitute (s) description 이라는 패턴을 itemize로 변경(substitute)하라' 라는 의미가 됩니다. 물론 더 복잡한 패턴이나 조건을 이용한 정규표현식을 사용할 수도 있습니다.
  while (<>) {
    s/description/itemize/g;
  }
  • 만약 어떤 문서내에서의 반복되는 pattern을 찾아보는 경우를 생각해 봅시다. 다음 같은 문서에서 우리가 찾고자 하는 pattern은 <sup >(\d)</sup></a></span>(.*)</div></footnote>라고 합시다.옆에 써진 정규표현식은 바르게 된 표현이 아닙니다. 단지 그냥 우리가 읽기 편하게 만든것 입니다.위와 같은 Pattern은 2개가 존재 합니다.
\def\jstoday{2004-12-17 16:12:00} \input htex \input onmouseover.4ht  <js><footnote>fn1x0=<div class="js"><span class="footnote-mark"><a
 id="fn1x0">    <sup >1</sup></a></span>가가가가가가가가가가가가가각가가손이나 기구를 이용해서 골반의 상태나 산도의 입구등을 살펴보는
행위</div></footnote>
<footnote>fn2x0=<div class="js"><span class="footnote-mark"><a
 id="fn2x0">    <sup >2</sup></a></span>가끔씩 **********************입니다</div></footnote>

   <>    ol_hauto = 1;                                                                                                            </></js>

#!/usr/bin/perl
open(RFH,$ARGV[0]) || die $!;
while(<RFH>){
        $tex_content .= $_;
        }
close RFH; #우선 필요한 화일에서 전체를 스칼라 data로 불러 들입니다.
while ($tex_content =~ m{<sup >(\d)</sup></a></span>(.*?)</div></footnote>}gms) #여기가 가장 중요한 point인데요.밑에 설명하겠습니다.
{
print "\n\n$1\n $2\n";
}
위와 같이 하면 됩니다. * 위의 경우에 있어서 변경자 modifier부터 살펴보면 ms변경자는 여러 line를 처리하기 위해서 붙여진 것이며, g옵션은 data의 끝까지 가서 match를 하라는 말입니다. 여기서 $2에 해당하는 (.*?)가 있는데, 이것의 의미는 .*에 느슨한 수량자(정규식 완전해부와 실습의 저자인 제프리 프리돌이 쓴 표현입니다.)을 씀으로 해서 2번째 match된 것 까지 가지 않게 하기 위한 것 입니다.(?) 그리고 while을 해준 이유는 match가 data의 끝까지 가지 않았으면, 마지막 match가 된 부분부터 다시 match를 시도 하라는 의미입니다. 자세한 내용은 관련서적이나 Tutorial을 보시기 바랍니다.

2 관련 서적

[ISBN-8979142269]
  • 서평
    • :) :) :) :) :) 지혜의 여신 미네르바의 상징인 부엉이가 표지를 장식하고 있습니다. 개인적으로 잘 맞는 그림이라고 생각합니다. 번역판은 상호참조 오타가 많지만 그럭저럭 볼만합니다. 책 내용은 아주 좋습니다. (아직도 보다 말다 하는 중입니다.) 강추 -- hermian
[ISBN-0321112547] -- smcho

4 Tips


5 Utility

Regular Expression Coach, Regular Expression 을 학습하는데 있어서 좋은 도구입니다. Lisp 로 만들었고, 실행파일이 제공됩니다.
실행파일을 어디서 다운 받을 수 있나요? mailing에 든다음 무언가 하는 건가요? --hermian
프로그램 다운로드 장소를 추가하였습니다. -- smcho

프로그램 다운로드 [http]http://weitz.de/regex-coach/ 메일링 리스트 [http]http://common-lisp.net/mailman/listinfo/regex-coach

한글Windows환경에서는 폰트 문제때문에 display하는데 다음의 조처가 필요합니다. regedt해서 HKEY_CURRENT_CONFIG/software/fonts 변경. hgvafix.fon -> vgafix.fon hvgasys.fon -> vgasys.fon vga949.fon -> vgaoem.fon

-- smcho


Contributors : smcho,hermian

SeeAlso. Nsmk:정규식


^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-01-28 10:50:55
Processing time 0.0444 sec