2012-10-19 82 views
8

我有一個HTML文件,其中可能包含Javascript,PHP以及所有這些人可能會或可能不會放入其HTML文件的內容。在HTML中查找註釋

我想從此html文件中提取所有評論。

我可以指出兩個問題在做這個:

  1. 什麼是一個語言的評論可能不會出現在其他評論。

  2. 在Javascript中,其餘行使用//標記進行了註釋。但是其中的URL也包含//,因此我可以很好地刪除部分網址,如果我只用//替換//,然後再用 替換該行的其餘部分即可。

所以這不是一個小問題。

是否有任何解決方案可以滿足這些需求?

有沒有人已經這樣做?

+3

你是對的,這不是微不足道的。爲了可靠地刪除註釋,您需要完全解析文件(PHP,HTML和Javascript)。如果可能,我建議使用PHP;雖然我更喜歡Perl,但PHP的工具本身比Perl工具更好地處理PHP。這裏是讓你開始的東西:http://stackoverflow.com/questions/503871/best-way-to-automatically-remove-comments-from-php-code。然後,您只需在PHP中查找HTML和JavaScript解析器就可以對文件的這些部分進行同樣的操作。 – dan1111

+0

爲什麼你會在你的HTML文件中使用PHP?我只有CSS,JavaScript和HTML,然後是谷歌的「HTML Minifier」,可以刪除評論,空白和一般「瘦」你的網頁的產品。 –

+1

@RB。預渲染? – Jivings

回答

0

從您的話來看,您正在思考一些基於正則表達式的方法:在整個文件中這樣做是一種痛苦,嘗試使用一些工具來突出或丟棄有趣或無趣的文本,然後開始工作根據保留/丟棄標準,你的篩子剩下什麼。看看HTML :: Tree和TreeBuilder,處理HTML標記可能非常有用。

2

問題2:是不是每個URL引用,或者用「www.url.com」或「www.url.com」,當你把它寫在兩種語言?我不確定。如果是這種情況,那麼你所要做的就是解析代碼,並檢查反斜槓前面是否有引號,以知道它是一個真正的url還是一個註釋。

+0

這實際上是我現在正在做的。 –

+0

所以你解決了這個問題?如果沒有(也許我沒有理解你的問題),問題是什麼? :) –

1

查找到解析器生成像ANTLR具有語法爲many languages,寫一個嵌套解析器可靠地找到意見。如果準確性很重要,正則表達式不會幫助你。即使那樣,它也不會100%準確。

考慮

問題3,在語言的註釋並不總是在語言的註釋。

<textarea><!-- not a comment --></textarea> 
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script> 

問題4,嵌入語言中的評論可能顯然不是評論。

<button onclick="&#47;&#47; this is a comment//&#10;notAComment()"> 

問題5,什麼是評論可能取決於如何配置瀏覽器。

<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on --> 
<!--[if IE 8]>This is a comment, except on IE 8<![endif]--> 

我不得不部分地解決這個問題,從源代碼註釋的Elid防止泄漏軟件實現細節的上下文模板系統。

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146表示在註釋中的JavaScript標識的測試用例,後來測試用例顯示CSS和HTML鑑定意見。您可能可以修改該代碼以查找評論。它不會處理PHP代碼部分中的註釋。

0

我會將HTML文件轉換爲字符數組並解析它。隨着您前進並跳過或刪除這些分段,您可以檢測到諸如「<」,「 - 」,「www」,「http」等關鍵字符串。

開始/結束指數必須正確識別,這是一個挑戰,但您將擁有全部權力。

如果性能不成問題,還有其他方法可以簡化過程。例如,可以使用XML :: Twig來抓取所有標籤,並且可以解析該字符串以檢測JS註釋。