자바 정규표현식

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> 태그와 일치하는 패턴을 먼저 찾아보고... 조금씩 늘려가면서 일치하는 패턴을 찾는다..


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


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








 

Posted by 즐건세상
l