정규표현식을 사용하실때 주의하실 점은
longest match가 된다는 것을 유념해야 한다는 것입니다.
즉, '<.*>' 와 같은 패턴은
중간에 '>'가 나온다고 거기서 멈추는 것이 아니라,
위의 문장 전체를 매칭시킵니다.
이 점을 주의하셔서 (<[^>]+>)([^<]+)
정도의 패턴을 사용하시면
"<foo>bar<...>"의 문장이 주어졌을때
\1은 "<foo>", \2는 "bar"를 매칭시킬 수 있습니다.
이 패턴을 계속 반복 적용하시면 어느정도 원하시는 결과를 얻을 수 있을것 같네요.
하지만, voider님의 답글처럼 HTML을 처리할때는 파서를 이용하시는 편이
훨신 속편하고 개발 시간도 단축할 수 있으실 겁니다.
greedy match를 사용하려면 그냥 .+?와 같이 뒤에 ?를 붙이면 됩니다. (.*?, .?? 등이 모두 되며, 펄 정규표현식, PCRE, 루비, 파이썬 등등이 모두 해당됩니다.) 하지만 이 경우에는 파서를 사용하는 것이 더 합리적일 것입니다. HTMLParser 같은 모듈을 찾아 보세요.
정규식으로 물론 가능합니다.하지만 html을 위한 파서가 많이 있으니
정규식으로 물론 가능합니다.
하지만 html을 위한 파서가 많이 있으니 파서를 사용하세요
특히나 파이썬 같은 경우엔 기본 모듈로 있을거라 생각되네요.
-- 아쉬운 하루 되세요 --
정규표현식을 사용하실때 주의하실 점은longest match가 된다는
정규표현식을 사용하실때 주의하실 점은
longest match가 된다는 것을 유념해야 한다는 것입니다.
즉, '<.*>' 와 같은 패턴은
중간에 '>'가 나온다고 거기서 멈추는 것이 아니라,
위의 문장 전체를 매칭시킵니다.
이 점을 주의하셔서
(<[^>]+>)([^<]+)
정도의 패턴을 사용하시면
"<foo>bar<...>"의 문장이 주어졌을때
\1은 "<foo>", \2는 "bar"를 매칭시킬 수 있습니다.
이 패턴을 계속 반복 적용하시면 어느정도 원하시는 결과를 얻을 수 있을것 같네요.
하지만, voider님의 답글처럼 HTML을 처리할때는 파서를 이용하시는 편이
훨신 속편하고 개발 시간도 단축할 수 있으실 겁니다.
[quote="jeweljar"]정규표현식을 사용하실때 주의하실 점은
greedy match를 사용하려면 그냥 .+?와 같이 뒤에 ?를 붙이면 됩니다. (.*?, .?? 등이 모두 되며, 펄 정규표현식, PCRE, 루비, 파이썬 등등이 모두 해당됩니다.) 하지만 이 경우에는 파서를 사용하는 것이 더 합리적일 것입니다. HTMLParser 같은 모듈을 찾아 보세요.
- 토끼군
댓글 달기