寻找匹配的正则表达式并替换(最好是PHP但无关紧要)来改变它(开头和结尾只是需要保留的随机文本)。
在:
fkdshfks khh fdsfsk
<!--g1-->
<div class='codetop'>CODE: AutoIt</div>
<div class='geshimain'>
<!--eg1-->
<div class="autoit" style="font-family:monospace;">
<span class="kw3">msgbox</span>
</div>
<!--gc2-->
<!--bXNnYm94-->
<!--egc2-->
<!--g2-->
</div>
<!--eg2-->
fdsfdskh
到这个OUT:
fkdshfks khh fdsfsk
<div class='codetop'>CODE: AutoIt</div>
<div class='geshimain'>
<div class="autoit" style="font-family:monospace;">
<span class="kw3">msgbox</span>
</div>
</div>
fdsfdskh
感谢。
答案 0 :(得分:74)
您是否只想删除评论? <怎么样
s/<!--[^>]*-->//g
或略好一点(提问者自己建议):
<!--(.*?)-->
但是请记住,HTML 不是是常规的,所以使用正则表达式来解析它会导致你进入一个受到伤害的世界,当有人抛出奇怪的边缘情况时。
答案 1 :(得分:49)
preg_replace('/<!--(.*)-->/Uis', '', $html)
此PHP代码将从$ html字符串中删除所有html注释标记。
答案 2 :(得分:20)
更好的版本是:
(?=<!--)([\s\S]*?)-->
它符合以下html评论:
<!--
multi line html comment
-->
或
<!-- single line html comment -->
和什么是最重要的它匹配这样的评论(其他人显示的其他正则表达不包括这种情况):
<!-- this is my blog: <mynixworld.inf> -->
注意强>
虽然从语法上来说下面的一个是html注释,但是浏览器可能会以某种方式解析它,因此它可能具有特殊含义。剥离这些字符串可能会破坏您的代码。
<!--[if !(IE 8) ]><!-->
答案 3 :(得分:16)
不要忘记考虑条件评论,如
<!--(.*?)-->
将删除它们。试试这个:
<!--[^\[](.*?)-->
这也将删除下层揭示的条件评论。
编辑:
这不会删除下层揭示或下层隐藏的评论。
<!--(?!<!)[^\[>].*?-->
答案 4 :(得分:8)
啊,我已经完成了,
<!--(.*?)-->
答案 5 :(得分:2)
如果您的评论包含换行符,请尝试以下操作:
/<!--(.|\n)*?-->/g
答案 6 :(得分:2)
<!--([\s\S]*?)-->
在javascript和VBScript中也可用作“。”与所有语言的换行符不匹配
答案 7 :(得分:2)
接下来:
/( )*<!--((.*)|[^<]*|[^!]*|[^-]*|[^>]*)-->\n*/g
可以使用测试字符串删除多行注释:
fkdshfks khh fdsfsk
<!--g1-->
<div class='codetop'>CODE: AutoIt</div>
<div class='geshimain'>
<!--eg1-->
<div class="autoit" style="font-family:monospace;">
<span class="kw3">msgbox</span>
</div>
<!--gc2-->
<!--bXNnYm94-->
<!--egc2-->
<!--g2-->
</div>
<!--eg2-->
fdsfdskh
<!-- --
> test
- -->
<!-- --
<- test <
>
- -->
<!--
test !<
- <!--
-->
<script type="text/javascript">//<![CDATA[
var xxx = 'a';
//]]></script>
ok
答案 8 :(得分:1)
这些代码也删除了javascript代码。 那太糟糕了:|
这里的示例javascript代码将使用以下代码删除:
<script type="text/javascript"><!--
var xxx = 'a';
//-->
</script>
答案 9 :(得分:1)
function remove_html_comments($html) {
$expr = '/<!--[\s\S]*?-->/';
$func = 'rhc';
$html = preg_replace_callback($expr, $func, $html);
return $html;
}
function rhc($search) {
list($l) = $search;
if (mb_eregi("\[if",$l) || mb_eregi("\[endif",$l) ) {
return $l;
}
}
答案 10 :(得分:1)
这是我的尝试:
<!--(?!<!)[^\[>][\s\S]*?-->
这也会删除多行注释,并且不会删除下层显示或下层隐藏的注释。
答案 11 :(得分:0)
// Remove multiline comment
$mlcomment = '/\/\*(?!-)[\x00-\xff]*?\*\//';
$code = preg_replace ($mlcomment, "", $code);
// Remove single line comment
$slcomment = '/[^:]\/\/.*/';
$code = preg_replace ($slcomment, "", $code);
// Remove extra spaces
$extra_space = '/\s+/';
$code = preg_replace ($extra_space, " ", $code);
// Remove spaces that can be removed
$removable_space = '/\s?([\{\};\=\(\)\\\/\+\*-])\s?/';
$code = preg_replace ('/\s?([\{\};\=\(\)\/\+\*-])\s?/', "\\1", $code);
答案 12 :(得分:0)
如果您只希望文本或带有特定标签的文本,可以使用PHP strip_tags 进行处理,它还会删除HTML注释,并且您可以这样保存所需的HTML标签:
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text, ['p', 'a']);
输出将是:
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
我希望它能对某人有所帮助!