2010-06-15 50 views
1

我需要从网页的HTML代码中删除所有Java脚本标记以及两者之间的内容和样式标记。到目前为止,我已经提出了这个表达式:我需要使用正则表达式和JRegex删除Java脚本标记

"(<[ \r\n\t]*script([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*script[ \r\n\t]*>)|(<[ \r\n\t]*noscript([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*noscript[ \r\n\t]*>)|(<[ \r\n\t]*style([ \r\n\t>]|>){1,}([ \r\n\t]|.)*?</[ \r\n\t]*style[ \r\n\t]*>)" 

我使用JRegex库来处理正则表达式。当我在任何正则表达式测试仪测试它,它工作得很好,但是当我运行我的程序 - 这个错误报告这一切崩溃下来:

Exception in thread "Thread-0" java.lang.StackOverflowError 
    at java.util.regex.Pattern$BranchConn.match(Unknown Source) 
    at java.util.regex.Pattern$BmpCharProperty.match(Unknown Source) 
    at java.util.regex.Pattern$Branch.match(Unknown Source) 
    at java.util.regex.Pattern$GroupHead.match(Unknown Source) 
    at java.util.regex.Pattern$LazyLoop.match(Unknown Source) 
    at java.util.regex.Pattern$GroupTail.match(Unknown Source) 
    at java.util.regex.Pattern$BranchConn.match(Unknown Source) 
    at java.util.regex.Pattern$CharProperty.match(Unknown Source) 
    at java.util.regex.Pattern$Branch.match(Unknown Source) 
    at java.util.regex.Pattern$GroupHead.match(Unknown Source) 
    at java.util.regex.Pattern$LazyLoop.match(Unknown Source) 
.................................. 

它不断持续下去。如果有人能给我一个关于这个问题的建议 - 我会非常感激。

+0

首先是“([\ r \ n \ t] |)”是没有意义的。使用DOT_ALL或其他。 “([\ r \ n \ t>] |>)”也没有意义。把“>”放在 – takoi 2010-06-15 10:43:02

+0

之外你让我走上了正轨,谢谢! – piotr 2010-06-15 12:52:05

+0

这不是您正在使用的JRegex,它是Java的原生正则表达式包。 JRegex是Java在JDK 1.4中拥有自己的正则表达式之前创建的第三方库之一。 – 2010-06-15 22:17:09

回答

1

为什么不使用HTML解析器并删除<script><style>节点?

0

我可以解决这个问题。我使用删除脚本标签正则表达式和脚本标记之间使用正则表达式的内容:

@"<(script|SCRIPT)[^+]*?>[^>]*?<(/\script|SCRIPT)>" 
+2

如果您在一行的开头键入4个空格(或者选择它并键入CTRL + K),则将其格式化为代码。 – 2011-04-27 14:23:13