추억의 Regular Expression
[옛날 블로그 글입니다. 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 형식은 잘 알고계실테니 참고해서 보시면 되겠네요. 모르겠는 문법은 아래 링크 참조해주세요~~
참고 링크
w3schools의 RegExp Object Reference ( JavaScript )http://www.w3schools.com/jsref/jsref_obj_regexp.asp
meshplex의 Ruby/Regular expression and blocks ( Ruby. 이 링크는 그저 그렇네요 -_-;;)http://www.meshplex.org/wiki/Ruby/Regular_expressions_and_blocks
넹.. 이제 기억이 다 돌아오셨을까 모르겠네요. ^^ 손발 고생은 이제 그만, 정규표현식으로 즐거운 코딩 생활하세요~
p.s. 더 좋은 링크 알려주세요~
p.s. 위에 나온 표현식 개선해주세요~ -_-;;
아! 정규표현식은 사용하려고 할 때마다 까먹는 것 같아. 역시 많이 사용하지 않으면… (머리도 점점 나빠지고..)
히댕
18 Nov 08 at 3:35 am
앗 글자칠때마다 칸이 점점 커져..
IE8 beta2 깔았는데 엉망이야 -_- 사이트마다 안되는것들이 종종 보여.
그거 정복하면 한 재산 얻은 기분일거야.
문기은
19 Nov 08 at 9:14 am
히댕 : 넹.. 그래도 정규표현식 정도는 자유롭게 쓰실 것 같은데요~
머리가 나뻐져도 한 30년 더 해먹어야죠.. -_-;;
기은 : 고마워요~ IE 제가 잘 안쓰니까 정이 안가네요..
IE8 정복 노하우좀 정리해주세요~~
muscly
19 Nov 08 at 12:55 pm
IE8의 정복 노하우라.. 하나 있지.^^ 주소창 옆의 호환성뷰 버튼 눌러서 사용하면 돼.(너무 했나.^^)
히댕
20 Nov 08 at 12:59 am
그런 것도 있군요 -_-;; IE는 회사에서만 쓰는데, 테스트 중인게 있어서 IE8은 깔아볼 수가 없네요..
muscly
20 Nov 08 at 4:46 am
이글 보니깐 예전에 트위터 클라이언트만들 때 트위터 메시지 파싱하려고 삽질했던 기억이 새록새록.. 트위터는 링크도있고, @로 시작하는 아이디도 있고, #로 시작하는 태그도 있어서 무지 고뇌했던 기억이 나넹~
http://naggingmachine.tistory.com/684
naggingmachine
7 Apr 10 at 4:03 pm
좋은 링크다. 나중에 참고하면 엄청 도움될 듯~
muscly
8 Apr 10 at 9:29 pm