【问题标题】:Replace the content inside a DIV替换 DIV 中的内容
【发布时间】:2012-05-06 06:53:01
【问题描述】:

我有一个 div 叫

 <div id="form">Content</div>

我想用Preg_replace 的新内容替换div 的内容。 应该使用什么正则表达式?

【问题讨论】:

标签: php html regex markup


【解决方案1】:

You shouldn't be using a regex at all。 HTML 可以有多种形式,您需要考虑所有这些形式。如果 id/class 没有出现在您期望的位置怎么办?正则表达式必须非常复杂才能获得合理的结果。

相反,您应该使用 DOM 解析器 - 或者我最近偶然发现的一个非常酷的工具,phpQuery。有了它,您几乎可以像使用jQuery 一样访问您的 PHP 文档。

【讨论】:

  • -1 过时的笑话页面没有很好的解释链接。 (顺便说一句,您应该至少阅读标题并在某些时候过去非答案)。我们当然有一些更合理的 SO。
  • @mario:我同意链接是旧的并且是开玩笑的,但这是一个不会老化的问题。我确实试图寻找一个更严肃的答案,但这非常困难,因为 SO 没有“按最佳答案分数排序”搜索。如果您找到了,请随时更改。
【解决方案2】:

这将适用于您的情况:

$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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多