2010-06-15 70 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