Altruistic Programmer's Blog (KR)

이타주의 프로그래머의 블로그

추억의 Regular Expression

with 7 comments

[옛날 블로그 글입니다. 2008.11.18]

Regular Expression을 쓰려면 여기저기 레퍼런스를 찾아봐야 해서 귀찮으니까, 좀 정리해 보려고요. 최근에 씨름해서 만든 예제를 통해서 여러분의 뇌안에 숨은 정규표현식에 대한 기억을 되살려보시죠~

<pre>와</pre> 사이의 내용 찾아내기

아래 같은 HTML 문자열이 있을때…

<div>
<p>My Header</p>
<pre class=”myclass”>
#include <iostream>
#include <string>
</pre>
<p>My Impl</p>
<pre class=”myclass”>
void main();
</pre>
</div>

이런 결과를 뽑고 싶다면..

#include <iostream>
#include <string>

이런 정규표현식을 쓰면 됩니다. 

// javascript
var regexPre = /<pre([^>]*)>([^]*?)<\/pre>/i;
var result = regexPre.exec( html );
if ( !result )
 break; // No more match
var stringWeWant = result[2];

JavaScript 예제인데요, 요점만 보면… (너무 기본적인 건 빼고요..)

  • 둥근 괄호 : 그 안쪽의 식과 매칭되는 내용을 보관. 아래서 result를 통해 꺼내 쓸 수 있지요.
  • [^0] : 모든 문자를 의미하려고 쓴 거. 보통 Dot(.)는 \n을 제외한 모든 문자가 되어버려서, \n도 포함한 모든 문자를 표현하고 싶었는데 더 좋은 방법을 모르겠네요 -_-;;
  • *? : ?를 붙여주지 않은 *은 욕심쟁이(Greedy)라서 첫번째 <pre>와</pre> 두 쌍을 모두 매칭시켜 버려요. *?로 해주면 게으른(Lazy) 매칭이 되어서 제일 앞쪽 <pre>와</pre> 쌍만 잡히지요.
  • i : 제일 뒤에 나오는 i는 Case Insensitive, 대소문자 가리지 말라는 얘기.
  • result[2] : 2번째 둥근 괄호에 매칭되는 내용을 의미합니다. 우리가 바라는 바로 그 결과!

기억이 슬슬 되살아나시는지.. 요건  <pre> 엘리먼트 안쪽의 꺽쇠 괄호를 escape(?) 하려고 삽질하던 코드에서 발췌해봤습니다. :)

올바른 E-Mail 검사하기

사용자가 입력한 E-Mail 문자열이 올바른지 검사하려면..

# Ruby
validates_format_of :email, 
 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,

네, 요건 Ruby 코드인데요 :email 속성이 주어진 정규표현식에 맞는지 비교하라고 시키는 코드입니다. E-Mail 형식은 잘 알고계실테니 참고해서 보시면 되겠네요. 모르겠는 문법은 아래 링크 참조해주세요~~

참고 링크

넹.. 이제 기억이 다 돌아오셨을까 모르겠네요. ^^ 손발 고생은 이제 그만, 정규표현식으로 즐거운 코딩 생활하세요~

p.s. 더 좋은 링크 알려주세요~
p.s. 위에 나온 표현식 개선해주세요~ -_-;;

Written by muscly

November 18th, 2008 at 4:11 pm

Posted in 프로그래밍

7 Responses to '추억의 Regular Expression'

Subscribe to comments with RSS or TrackBack to '추억의 Regular Expression'.

  1. 아! 정규표현식은 사용하려고 할 때마다 까먹는 것 같아. 역시 많이 사용하지 않으면… (머리도 점점 나빠지고..)

    히댕

    18 Nov 08 at 3:35 am

  2. 앗 글자칠때마다 칸이 점점 커져..
    IE8 beta2 깔았는데 엉망이야 -_- 사이트마다 안되는것들이 종종 보여.
    그거 정복하면 한 재산 얻은 기분일거야.

    문기은

    19 Nov 08 at 9:14 am

  3. 히댕 : 넹.. 그래도 정규표현식 정도는 자유롭게 쓰실 것 같은데요~
    머리가 나뻐져도 한 30년 더 해먹어야죠.. -_-;;

    기은 : 고마워요~ IE 제가 잘 안쓰니까 정이 안가네요..
    IE8 정복 노하우좀 정리해주세요~~

    muscly

    19 Nov 08 at 12:55 pm

  4. IE8의 정복 노하우라.. 하나 있지.^^ 주소창 옆의 호환성뷰 버튼 눌러서 사용하면 돼.(너무 했나.^^)

    히댕

    20 Nov 08 at 12:59 am

  5. 그런 것도 있군요 -_-;; IE는 회사에서만 쓰는데, 테스트 중인게 있어서 IE8은 깔아볼 수가 없네요..

    muscly

    20 Nov 08 at 4:46 am

  6. 이글 보니깐 예전에 트위터 클라이언트만들 때 트위터 메시지 파싱하려고 삽질했던 기억이 새록새록.. 트위터는 링크도있고, @로 시작하는 아이디도 있고, #로 시작하는 태그도 있어서 무지 고뇌했던 기억이 나넹~

    http://naggingmachine.tistory.com/684

    naggingmachine

    7 Apr 10 at 4:03 pm

  7. 좋은 링크다. 나중에 참고하면 엄청 도움될 듯~

    muscly

    8 Apr 10 at 9:29 pm

Leave a Reply