preg_match只返回一个(最后)结果

时间:2015-04-24 09:15:29

标签: php regex preg-match

我尝试使用preg_match函数解析此字符串以获取数组名称和所有索引:

  

{#array [index1] [index2] [index3] ...}

我试过这个正则表达式,但在$matches中只是最后一个索引([index3]):

$string = "{#array[index1][index2][index3]}";
preg_match('|^\{\#[a-z0-9_\-]+(\[[a-z0-9_-]+\])*\}|i',$string,$matches);

结果:

Array
(
    [0] => {#array[index1][index2][index3]}
    [1] => [index3]
)

请给我帮助吗?

BTW:preg_match_all返回相同的结果

2 个答案:

答案 0 :(得分:1)

Preg_match确实只匹配一个。

如果您希望将更多数据与正则表达式匹配,则需要preg_match_all

答案 1 :(得分:1)

您需要按顺序使用\G锚来进行连续字符串匹配。

(?:\{#([a-z0-9_\-]+)|(?<!^)\G)\[([^\[\]]+)\](?=[^{}]*\})

DEMO