【问题标题】:preg_replace for own attributes in DIV tagpreg_replace 用于 DIV 标记中的自己的属性
【发布时间】:2011-06-15 14:21:34
【问题描述】:

我有一个关于 preg_replace 问题的快速问题。我只是 RegEx 的新手。 我想要达到的目标如下:

  • 我有一个 DIV 标签<div data-info="sourcefile.ext" class="elm swf">sourcefile</div>
  • 我想提取(数据信息)值和(类)值
  • 可能有可选标签,但我不需要这些属性的值
  • 这个替换应该在一个字符串中多次工作

我有:

$input = '<div data-info="sourcefile.ext" class="elm swf">sourcefile</div>';
$input = preg_replace('/(<div\s(class="(.*?)")\s(data-info="(.*?)")\b[^>]*>)(.*?)<\/div>/i', "$1 class:$2 data-info:$3", $input);

我想将值用作:&lt;object src="(data-info)" type="(class)"&gt;

这可能吗?有人可以向我展示/解释这是如何工作的吗?

非常感谢。

【问题讨论】:

  • 您肯定需要在服务器端执行此操作?它看起来有点像你在修补 DOM,这可能最容易用 javascript 完成..

标签: php html preg-replace replace


【解决方案1】:

您的正则表达式失败,因为它以错误的顺序列出了属性。匹配模式不适合此类事情(这将是更喜欢将 DOM 解析器用于此类目的的实际原因。)

\b 转义错误。您可以将这两个属性包装到 (?: .. | .. )+ 中,以允许有一点歧义:

 $input = preg_replace('/(?:<div
     (?: \s class="(.*?)"
       | \s data-info="(.*?)"  )+
     [^>]*>)
     (.*?)<\/div>/ix', "$3 class:$1 data-info:$2", $input);

$1 $2 $3 编号已关闭,也许您还是想在这里使用named capture groups

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2015-07-27
    • 2012-06-08
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多