자바 정규표현식
정규표현식에 관한 애기를 해보고자 한다.
정규표현식의 전반적인 내용에 관해서는 자바
튜토리얼(http://java.sun.com/docs/books/tutorial/essential/regex/index.html)
을
참고하시길..
여기서는 몇일동안 안 풀렸던 문제에 대해서 이야기 하고자 한다.
문제는 html 문서에서 <script
...>....</scirpt> 태그를 제거하는 문제다..
처음에는 사용한 정규표현식은
(<script.*>)([\wW]*)(</script>) 이다.
이 정규표현식을 사용할 경우
<script>....</script> <table>...</table>
<script>....</script>
가운데 있는 table 태그까지 삭제 되게
된다..
정확한 개념은 추후에 더 문서를 알아바야 겠지만.. greedy와 관련된것 같다..
간단한 예를 들어 보면
주어진 스트링이 fooooo 이고 정규 표현식이.. ".o*"일 경우 일치하는 패턴은 f 다음의 o 가 아니고 oooo 이
일치하게 된다.
이는 정규표현식이 패턴을 찾을 때 최대로 일치하는것(greedy)을 찾기 때문이다..
최소로
일치하는것(non-greedy)을 찾고 싶을 때에는 ".o+?" 이 정규표현식을 사용하면 해결할 수 있다..
script 태그에서도
적용하게 되면 (<script.*>)([\wW]*?)(</script>) 이 표현식을 사용하게 되면 scrip 태그를
제거할 수 있다.
별로 관계 없는 내요일수 있지만..
원래 정규표현식을 공부하게 된 이유가 html -> text 바꾸는 작업이 필요했기 때문이다.
하나 팁 같은걸.. 적어보자면..
일치하는 패턴을 찾기 위해서 작은 부분부터 조금씩 테스트를 해보면서 전체를 늘려가는 식으로 일치하는 패턴을 찾는 방법이다.
즉... 위의 script 태그를 제거하기 위해서..
<script> 태그와 일치하는 패턴을 먼저 찾아보고... 조금씩 늘려가면서 일치하는 패턴을 찾는다..
이렇게도 해보고 저렇게도 해보면서 이유를 생각하다 보면 조금씩 알아가지 않을까 생각된다..
정확한 개념을 알기 위해서는 문서를 보는것도 잊지말아야 겠지만..