PHP:正则表达式以查找以双斜杠开头的注释//

时间:2011-11-28 16:55:45

标签: php regex

我需要一个正则表达式来从字符串中删除单行注释,但保持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”&gt;“和”//bababa.com“&gt;”。

感谢任何暗示......

5 个答案:

答案 0 :(得分:1)

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


我尝试使用PHP的DomDocumentDomXPath给出一个替代答案,但它只支持XPath 1.0,并且替换功能在2.0之前不存在。我对XPath 1.0不够熟悉,无法替换DOM中的字符串。以下是您需要做的事情:

  1. 选择所有文本节点(将忽略属性,因为它们不是文本节点)
  2. \s*//.*(点与换行符不匹配)替换为''。
  3. 将文本插回节点。

答案 1 :(得分:1)

谢谢大家,但最后还是

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

似乎在评论之前有或没有空格,制表符或新行。

答案 2 :(得分:0)

正则表达式为^//

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

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

答案 3 :(得分:0)

您也可以使用它来删除单独出现在一行上的评论

/(?!http:)\/\//

答案 4 :(得分:0)

preg_replace( '~^\h?//(^$)~m', '', $html );

替换//直到带有''的行的末尾,前面有可选的水平空格。没有经过测试,但这样的事情应该有效。