我想使用PHP和正则表达式清除HTML中<body>
部分的注释和其他一些垃圾或标签,但我的代码不起作用:
$str=preg_replace_callback('/<body>(.*?)<\/body>/s',
function($matches){
return '<body>'.preg_replace(array(
'/<!--(.|\s)*?-->/',
),
array(
'',
), $matches[1]).'</body>';
}, $str);
问题是没有任何反应。评论将保持原样或任何清洁工作,没有任何反应。你能帮我吗?谢谢!
修改
感谢@mhall我认为我的正则表达式因<body>
标签中的属性而无效。我使用他的代码并更新:
$str = preg_replace_callback('/(?=<body(.*?)>)(.*?)(?<=<\/body>)/s',
function($matches) {
return preg_replace('/<!--.*?-->/s', '', $matches[2]);
}, $str);
这项工作完美!
谢谢大家!
答案 0 :(得分:0)
你真的太复杂吗?您不需要通过回调跳入和跳出,因为preg_replace
将在每场比赛中进行替换:
$parts = explode("<body", $str, 2);
$clean = preg_replace('/<!--.*?-->/s', '', $parts[1]);
$str = $parts[0]."<body".$clean;
将琴弦分成头部和身体,排除了头部的替换而没有大量凌乱的正则表达式。
请注意模式后的s
:'/.../s'
。这使得正则表达式中的点与其他字符一起匹配嵌入的换行符。