我有一个关于preg_replace问题的快速问题。我只是RegEx的新手。 我想要实现的目标如下:
<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)">
这可能吗?有人可以向我展示/解释这是如何运作的吗?
非常感谢。
答案 0 :(得分:0)
您的正则表达式失败,因为它以错误的顺序列出属性。匹配模式不适合这样的事情(这是为了这样的目的而更喜欢使用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。