【发布时间】:2015-05-01 15:12:57
【问题描述】:
我想使用 PHP 和正则表达式从 HTML 中的 <body> 部分清除 cmets 和其他一些垃圾或标签,但我的代码不起作用:
$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);
这项工作完美!
谢谢大家!
【问题讨论】:
-
为什么要清理 cmets?您可以使用
DOMDocument或其他文档解析器来更轻松地完成此操作。 -
不谈使用正则表达式的不相关性,我认为您的问题来自
<body>(.*?)<\/body>部分。默认情况下,“。”不包括换行符。您可能想用[\s\S]替换它## 编辑:没关系,没有看到“s”标志。 -
@ExplosionPills 我想要一种简单的方法来清理 HTML 中的一些内容。
-
对我有用 (PHP 5.5.14),但它也删除了
<body>/</body>标签。你想用什么字符串?
标签: php html regex html-parsing