$pattern = '#\[img (([^="\]]+)="([^"]+)" ?)+\]#';
preg_match_all($pattern,$blog,$matches,PREG_PATTERN_ORDER);
[img size="preview" click="http://text.com" align="right" src="pic:3378f.jpg"]
顶部的代码与上面的BBCode标签匹配,但只返回最后一个属性,它应该根据我的正则表达式中的子模式返回所有属性。这是什么交易?
答案 0 :(得分:2)
为此,您必须首先匹配[img]
块:
preg_match_all('#\[img(.*?)\]#s', $blog, $matches);
你记住标签内的模式,并使用另一个循环来提取参数,使用另一个preg
:
foreach ($matches[1] as $img) {
preg_match_all('#\s*([^=]+)="([^"]*)"#', $img, $matches);
// create key-pair array
$params = array_combine($matches[1], $matches[2]);
print_r($params);
}
输出:
Array
(
[size] => preview
[click] => http://text.com
[align] => right
[src] => pic:3378f.jpg
)