【发布时间】:2012-05-06 06:53:01
【问题描述】:
我有一个 div 叫
<div id="form">Content</div>
我想用Preg_replace 的新内容替换div 的内容。
应该使用什么正则表达式?
【问题讨论】:
-
它被描述了百万次。不要使用 Regex 来处理 HTML。使用 DOMDocument 或其他一些 HTML 解析器。
我有一个 div 叫
<div id="form">Content</div>
我想用Preg_replace 的新内容替换div 的内容。
应该使用什么正则表达式?
【问题讨论】:
You shouldn't be using a regex at all。 HTML 可以有多种形式,您需要考虑所有这些形式。如果 id/class 没有出现在您期望的位置怎么办?正则表达式必须非常复杂才能获得合理的结果。
相反,您应该使用 DOM 解析器 - 或者我最近偶然发现的一个非常酷的工具,phpQuery。有了它,您几乎可以像使用jQuery 一样访问您的 PHP 文档。
【讨论】:
这将适用于您的情况:
$html = '<div id="content">Content</div>';
$html = preg_replace('/(<\s*div[^>]*>)[^<]*(<\s*\/div\s*>)/', '$1New Content$2', $html);
echo $html; // <div id="content">New Content</div>
但是请注意,由于 HTML 不是常规语言,因此不可能处理所有情况。我提供的简单正则表达式将在以下示例中产生错误的输出:
<div class=">">Content</div>
【讨论】: