IT/java

자바 정규표현식

즐건세상 2007. 7. 11. 23:30

정규표현식에 관한 애기를 해보고자 한다.
정규표현식의 전반적인 내용에 관해서는 자바 튜토리얼(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> 태그와 일치하는 패턴을 먼저 찾아보고... 조금씩 늘려가면서 일치하는 패턴을 찾는다..


이렇게도 해보고 저렇게도 해보면서 이유를 생각하다 보면 조금씩 알아가지 않을까 생각된다..


정확한 개념을 알기 위해서는 문서를 보는것도 잊지말아야 겠지만..