正则 剔除HTML注释块

hzbigdog 北京新网互联 软件工程师  2009-08-25 03:22:12
我想剔除文本中的 <!-- -->注释块中的所有代码,但是多行注释的搞不掉,能否帮我看看怎么才能搞掉?
<?php
$sTmp = '
<!--scroll
menu-->
<SCRIPT language=javascript>
<!--scroll menu-->
<!--
if (isNS4) {
}
//-->
</SCRIPT>
';
$aRules = '/<!--(?:.(?<!<--))*.*-->$/m';
print_r(preg_replace($aRules, '', $sTmp));
?>
...全文
135 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
下载PilotEdit 2.8, http://topic.csdn.net/u/20090818/22/df665ee5-bd6f-4c6d-84b6-9831217e4e02.html

用下面的正则表达式查找替换(PilotEdit的正则支持多行):
查找:<!--[]*-->
替换为:


假设原始文件为:
<?php
$sTmp = '
<!--scroll
menu-->
<SCRIPT language=javascript>
<!--scroll menu-->
<!--
if (isNS4) {
}
//-->
</SCRIPT>
';
$aRules = '/<!--(?:.(?<!<--))*.*-->$/m';
print_r(preg_replace($aRules, '', $sTmp));
?>



将被转换为:
<?php
$sTmp = '

<SCRIPT language=javascript>


</SCRIPT>
';
$aRules = '/$/m';
print_r(preg_replace($aRules, '', $sTmp));
?>
回复
Bevin_chen 2009-08-25
5楼厉害, 刚我还郁闷 点的问题呢.
回复
coddz 2009-08-25
即便可以写出正则表达式,也比较复杂。
回复
foolbirdflyfirst 2009-08-25
s (PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。
====================================
$sTmp = '
<!--scroll

menu-->
<SCRIPT language=javascript>
<!--scroll menu-->
<!--
if (isNS4) {
}
//-->
</SCRIPT>
';
$aRules = '/<!--(.*?)-->/is';
print_r(preg_replace($aRules, '', $sTmp));
回复
tfxg 2009-08-25
主要是分行,估計簡單的正則解決不了
回复
Bevin_chen 2009-08-25
$aRules = "/<!--[a-z0-9 \r\n\(\){}\/]+-->/i";
回复
hzbigdog 2009-08-25
不行啊,分行的剔除不了,单行<!--scroll menu-->可以剔除,其他两个代码块都剔除不了。试过了下面的代码

$aRules = '/<!--.+?-->/m';

剔除后是这个结果。
			  <!--scroll 
menu-->
<SCRIPT language=javascript>

<!--
if (isNS4) {
}
//-->
</SCRIPT>
回复
Bevin_chen 2009-08-25
$aRules = "/<!--.+?-->/";
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告