2010-06-07 77 views
3

我正在嘗試檢查html文檔是否包含使用正則表達式不是空的腳本標記。正則表達式應該匹配任何帶有空格或換行符以外的內容的腳本標籤。如何檢查html文檔是否包含使用正則表達式不爲空的腳本標記

我已經試過

<script\b[^>]*>[^.+$]</script> 

但這個表達式只能找到腳本標記一個空間。

+4

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-06-07 22:04:39

+0

您使用哪種語言? – 2010-06-07 22:06:16

+0

@John Sheehan帖子在這裏不適用 – 2010-06-07 22:07:36

回答

7

Don't parse HTML with regexen!嚴重的是,它在一般情況下根本不可能。你爲什麼想在這裏使用正則表達式?使用HTML解析器會更有意義,但我不能給你任何特別的建議,因爲我不知道你使用的是什麼語言。如果您使用JavaScript的DOM,例如,你會希望類似以下內容:

var scripts  = document.getElementsByTagName('script') 
var numScripts = scripts.length 
var textScripts = [] 
for (var i = 0; i < numScripts; ++i) 
    if (scripts[i].text !== '') textScripts.push(scripts[i]) 

這看起來在HTML的結構確定腳本變量的屬性,而不是在凌亂的文字。


編輯1:顯然,你使用的是Java。不幸的是,我不知道解析Java中的HTML,所以我不能給你任何建議。然而,看看這一點,因爲這是一條路。

+0

它是這種方式很容易複製粘貼文本。 ;)順便說一句,根據他/她的評論,OP使用java.util.regex。 – 2010-06-07 22:25:05

2

雖然你可以空格或換行符匹配腳本標記,你可以包含不僅空格或換行,因爲標籤的內容可能包含腳本標記本身,任何不比賽script標籤你可能會出現的正則表達式有時會過早或有時太遲而與結束標記匹配。

您需要識別正確嵌套括號的語言的變體,這對於正則表達式來說是不可能的,因爲語言不是常規語言。

由於包含腳本標記的註釋的可能性使問題更加複雜。

4

正則表達式不是正確的工具。使用HTML parser。我可以爲此推薦Jsoup

這裏有一個開球例如:

URL url = new URL("http://stackoverflow.com/questions/2993515"); 
Document document = Jsoup.parse(url, 3000); 

Elements scripts = document.select("script"); 
for (Element script : scripts) { 
    String data = script.data(); 
    if (!data.isEmpty()) { 
     System.out.println(data); 
    } 
} 

Jsoup是最冗長的所有HTML解析器,它提供了與jQuery like selectors支持一個很好的API。

0

使用TagSoup或另一個Java DOM parser找出來。

在任何情況下都不能使用正則表達式來解析HTML。

相關問題