preg_replace用于DIV标记中自己的属性


preg_replace for own attributes in DIV tag

我有一个关于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);

我想将这些值用作:<object src="(data-info)" type="(class)">

这可能吗?有人能向我展示/解释一下这是怎么回事吗?

非常感谢。

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

'b转义错误。您可以将这两个属性封装到(?: .. | .. )+中,以允许一点模糊性:

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

$1$2$3编号已关闭,也许您无论如何都想在此处使用命名捕获组。