[Regex]역참조 사용하기
04 March 2014
역참조 사용하기
한 문장이 있고 이 문장에 반복해 나오는 문자, 바로 실수로 같은 단어를 두번 입력한 오자를 반드시 찾고 싶다고 가정할 때 두 단어가 일치하는지 알려면 먼저 나온 단어를 찾아야 합니다. 역참조는 정규 표현식 패턴으로 앞서 일치한 부분을 다시 가르킵니다.
예문)
This is a block of of text,
several words here are are
repeated, and and they
should not be.
정규 표현식)
[ ]+(\w+)[ ]+\1
결과)
of of
are are
and and
\1은 패턴에서 처음 사용한 하위 표현식과 일치한다는 뜻입니다. \2는 두 번째, \3은 세 번째 사용한 하위 표현식과 일치하는 식입니다.
주의 : 역참조는 참조하는 표현식이 하위표현식일 때 동작합니다.
다음 위의 역참조를 사용하여 시작과 끝이 일치하는 태그를 찾습니다.
예문)
<BODY>
<H1>Welcome to my homepage</H1>
Content is divided into four sections:<BR>
<H2>ColdFusion</H2>
Information about Macromedia ColdFusion.
<H2>Wireless</H2>
<Information about Bluetooth, 802.11, and more.
<H2>This is not valid HTML</H3>
</BODY>
정규 표현식)
<([hH][1-6])>.*?</\1>
결과)
<H1>Welcome to my homepage</H1>
<H2>ColdFusion</H2>
<H2>Wireless</H2>
앞의 태그를 하위 표현식으로 묶어 역참조를 사용하도록 하였습니다.
치환 작업
치환 작업을 할 때는 정규 표현식이 두 개 필요합니다. 하나는 원하는 부분을 일치시키는 패턴, 다른 하나는 일치한 부분을 치환하는데 사용할 패턴입니다.
아래는 치환 작업을 수행하는 예제입니다.
예문)
Hello, ben@forta.com is my email address.
정규 표현식)
(\w+[\w\.]*@[\w\.]+\.\w+)
치환)
<A HREF="mailto:$1">$1</A>
결과)
Hello, <A HREF="mailto:ben@forta.com">ben@forta.com</A> is my email address.
$1은 역참조에서 얻은 결과값이며 치환하는데 사용할 수 있습니다.
주의 : 정규 표현식 구현에 따라 역참조를 표시하는 방법을 바꿔야 합니다.
예제를 하나 더 참고합니다.
예문)
313-555-1234
248-555-9999
810-555-9000
정규 표현식)
(\d{3})(-)(\d{3})(-)(\d{4})
치환)
($1) $3-$5
결과)
(313) 555-1234
(248) 555-9999
(810) 555-9000