我有一个HTML文件,其中可能有Javascript,PHP以及人们可能会或可能不会将其放入HTML文件中的所有内容。
我想从这个html文件中提取所有评论。
我可以指出这样做有两个问题:
一种语言的评论可能不是另一种语言的评论。
在Javascript中,使用//
标记注释掉其余行。但是网址中还包含//
,因此我可能会删除部分网址
只需申请代替//
然后再代替
该行的其余部分,没有任何内容。
所以这不是一个小问题。
是否有任何解决方案已经可用?
有人已经这样做了吗?
答案 0 :(得分:2)
问题2:当您用任何一种语言编写时,不是每个网址都引用了“www.url.com”或“www.url.com”吗?我不确定。如果是这种情况,那么你所要做的就是解析代码并检查反斜杠前面是否有任何引号,以确定它是真实的URL还是仅仅是注释。
答案 1 :(得分: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="// this is a comment// 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代码部分中的注释。
答案 2 :(得分:0)
从你的话来看,你正在思考一些基于正则表达式的方法:在整个文件中这样做是很痛苦的,尝试使用一些工具突出显示或丢弃有趣或无趣的文本,然后研究什么根据保留/丢弃标准从筛子中留下。看看HTML :: Tree和TreeBuilder,处理HTML标记可能非常有用。
答案 3 :(得分:0)
我会将HTML文件转换为字符数组并解析它。您可以在前进时检测“&lt;”,“ - ”,“www”,“http”等关键字符串,并跳过或删除这些段。
必须正确识别开始/结束指数,这是一项挑战,但您将拥有全部权力。
如果性能不是问题,还有其他方法可以简化流程。例如,可以使用XML :: Twig抓取所有标记,并且可以解析字符串以检测JS注释。