PHP:regex,用于查找以双斜杠//开头的注释


PHP: regex to find comments starting with double slashes //

我需要一个正则表达式来从字符串中去除单行注释,但不影响URL。代码应该使用这样的东西:

//Some Comment on http://bobobo.com where bla < 5
<script type="text/javascript" src="http://bububu.com"></script>
<script type='text/javascript' src='http://bababa.com'></script>

编辑:我当然不会在HTML文件中使用那种注释。正确的例子是

<script type="text/javascript">
   //Some Comment on http://bobobo.com where bla < 5
</script>
<script type="text/javascript" src="http://bububu.com"></script>
<script type='text/javascript' src='http://bababa.com'></script>

对不起,对不起误导了我。

一个可能的解决方案应该找到"//对http://bobobo.com其中bla<5",但不是"//bububu.com">"answers"//bababa.com'>"。

谢谢你的提示。。。

简短的回答是:不要原因是单行注释在HTML中不是有效的注释。它们只是文本标记。你的代码中不应该包含它们。在将它们插入源之前将其消除。


我试图使用PHP的DomDocumentDomXPath为您提供另一个答案,但它只支持XPath1.0,而replace函数直到2.0才存在。我对XPath1.0不够熟悉,无法替换DOM中的字符串。以下是您需要做的:

  1. 选择所有文本节点(将忽略属性,因为它们不是文本节点(
  2. 's*//.*(点与换行符不匹配(替换为">
  3. 将文本重新插入到节点中

谢谢大家,但最后

preg_match('!//.*?'n!', $data, $matches); 

似乎可以在注释前添加或不添加空格、制表符或换行符。

正则表达式为^//

例如,在preg_replace()中,可以使用字符串'!^//!'!用作正则表达式分隔符,以避免倾斜牙签综合症('/^'/'//'(。

如果行可以以空格开头,则可以使用^'s*//

您也可以使用它来剥离没有单独出现在行上的注释

/(?!http:)'/'//
preg_replace( '~^'h?//(^$)~m', '', $html );

将//替换为",直到行尾,并在其前面添加可选的水平空白。未进行测试,但类似的操作应该可以。