티스토리 툴바

시간을 기록하다

블로그 이미지
by 기록자
  • 28,673Total hit
  • 6Today hit
  • 9Yesterday hit

요즘 나는 업무상 필요에 의해서 perl을 공부하고 있다.
내가 생각하는 perl 의 장점은 간단한 코딩 몇 줄만으로도 상당한 위력을 발휘한다는 것이다.
그런 생각의 중심에는 바로 정규표현식이 있다.
사실 정규표현식을 사용할 수 있는 프로그래밍 언어는 여러가지 있지만, perl처럼 스크립트의 형식으로 사용하는 것에는 여러가지 장점이 있다고 생각한다.

오늘은 perl을 이용한 텍스트의 Parsing 에서 유용하게 활용할 수 있는 팁을 기록한다.

인터넷에는 수많은 문서들이 존재하며 그런 문서들을 수집하다보면 html 파일처럼 태그가 붙어 있는 문서들이 많이 있다.
오늘은 그러한 태그를 이용해 필요한 데이터를 추출할 때 사용할 수 있는 팁으로써 중첩된 동일한 태그에서 가장 안쪽의 데이터를 추출하는 방법이다.
사실 별것 아닌 방법이지만 어느날인가 KLDP에서 이 부분에 대해 해법을 찾지못하고 여러사람들이 방법들을 얘기하던 기억이 나서 적어두고자한다.

우선 아래의 예를 보면 두 개의 div 태그 안에 쌓여 있는 형태를 볼 수 있을 것이다.

aaa<div>bbb<div>123</div>ccc</div>ddd

위와 같은 경우 <div> 와 </div> 사이의 데이터를 찾고자 했을 때 다음과 같은 정규표현식을 사용할 수 있을 것이다.

/\<div\>.*?\<\/div\>/


하지만 위와 같은 형태로 데이터를 추출하면 아래와 같은 결과가 나온다

<div>bbb<div>123</div>

정규표현식의 처리 특성상 먼저 나타난 <div> 에 대해 위치를 찾아버리므로 당연한 결과이다.
하지만 우리가 원하는 데이터가 <div>123</div> 로써 태그의 형태상 가장 안쪽에 있는 것을 찾기 원한다면 어떻게 해야 할 것인가를 생각하지 않을 수 없다.

이런 경우 아래와 같은 형태의 reverse 함수와 그에 맞는 역패턴을 이용하는 방법이 쓸만하다.


이런 고민을 하고 있을법한 사람이라면 위의 코드내용에 대해서는 크게 어려운것이 없으니 쉽게 이해 할 것이라 생각하고 특별히 코드에 대한 설명은 하지 않겠다.

위의 코드를 실행하면 아래 그림과 같은 결과를 확인할 수 있을 것이다.


간단하면서도 단순하고, 또한 html 이나 xml 문서와 같이 구조가 있는 문서를 처리할 때 유용하게 사용할 수 있는 방법이라고 생각한다.

PS: 내가 기억하기로는 C#에서의 정규표현식에서는 최단일치를 할 수 있는 방법이 있었던것 같은데 안쓴지 오래되서 가물가물..;;

크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
TRACKBACK 0 AND COMMENT 1

ARTICLE CATEGORY

분류 전체보기 (42)
개발 노트 (1)
초보의 알고리즘 (17)
프로그래밍 팁 (13)
기타 등등등등등 (11)

CALENDAR

«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

ARCHIVE

LINK