簡體   English   中英

在HTML中查找注釋

[英]Finding comments in HTML

我有一個HTML文件,其中可能包含Javascript,PHP,而人們可能會或可能不會將所有這些東西放入HTML文件中。

我想從此html文件中提取所有注釋。

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

  1. 用一種語言發表的評論可能不是用另一種語言發表的評論。

  2. 在Javascript中,其余行使用//標記注釋掉。 但是,URL中也包含// ,因此,如果我只應用// ,然后替換行中的其余內容,則不添加任何內容,因此我很可能會消除URL的某些部分。

因此,這不是一個小問題。

已經有解決方案嗎?

有人做過嗎?

問題2:當您用任何一種語言編寫網址時,不是每個網址都用“ www.url.com”或“ www.url.com”引用嗎? 我不確定。 如果是這種情況,那么您要做的就是解析代碼,並檢查反斜杠之前是否有任何引號,以了解它是真實的網址還是僅僅是注釋。

查看諸如ANTLR之類的解析器生成器,該生成器具有多種語言的語法,並編寫一個嵌套解析器以可靠地查找注釋。 如果准確性很重要,則正則表達式將無濟於事。 即使那樣,它也不是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]-->

對於上下文模板系統,我不得不部分解決此問題,該系統從源代碼中刪除注釋以防止泄漏軟件實現細節。

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146顯示了一個用JavaScript標識注釋的測試用例,以后測試用例顯示以CSS和HTML標識的注釋。 您也許可以修改該代碼以查找注釋。 它不會處理PHP代碼部分中的注釋。

從您的話看來,您正在考慮基於正則表達式的某種方法:在整個文件上這樣做是很痛苦的,嘗試使用一些工具來突出顯示或丟棄有趣或無趣的文本,然后處理剩下的內容。根據保留/丟棄標准篩選篩子。 看一下HTML :: Tree和TreeBuilder,處理HTML標記可能非常有用。

我會將HTML文件轉換為字符數組並進行解析。 前進時,您可以檢測到諸如“ <”,“-”,“ www”,“ http”之類的鍵字符串,可以跳過或刪除這些段。

必須正確識別開始/結束索引,這是一個挑戰,但是您將擁有全部功能。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM