【问题标题】:preg_match_all not returning all subpatternspreg_match_all 不返回所有子模式
【发布时间】:2012-08-30 01:33:53
【问题描述】:
$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 标签匹配,但只返回最后一个属性,当它应该根据我的正则表达式中的子模式返回所有时。有什么关系?

【问题讨论】:

标签: php regex bbcode


【解决方案1】:

为此,您必须首先匹配 [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
)

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 2012-11-14
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多