我有一个关于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编号已关闭,也许您无论如何都想在此处使用命名捕获组。