我需要一个正则表达式来从字符串中去除单行注释,但不影响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的DomDocument
和DomXPath
为您提供另一个答案,但它只支持XPath1.0,而replace函数直到2.0才存在。我对XPath1.0不够熟悉,无法替换DOM中的字符串。以下是您需要做的:
- 选择所有文本节点(将忽略属性,因为它们不是文本节点(
- 将
's*//.*
(点与换行符不匹配(替换为"> - 将文本重新插入到节点中
谢谢大家,但最后
preg_match('!//.*?'n!', $data, $matches);
似乎可以在注释前添加或不添加空格、制表符或换行符。
正则表达式为^//
。
例如,在preg_replace()
中,可以使用字符串'!^//!'
。!
用作正则表达式分隔符,以避免倾斜牙签综合症('/^'/'//'
(。
如果行可以以空格开头,则可以使用^'s*//
。
您也可以使用它来剥离没有单独出现在行上的注释
/(?!http:)'/'//
preg_replace( '~^'h?//(^$)~m', '', $html );
将//替换为",直到行尾,并在其前面添加可选的水平空白。未进行测试,但类似的操作应该可以。