正则表达式,我想在子匹配中返回(n)值

时间:2015-08-14 14:26:25

标签: php regex

我有以下正则表达式,我想从文本中提取一些带有(n)参数的模板标签:

\{{2}([\w\-\d]+)([\s:\,]*(?:\[([\w\%]+)\])*)*\}{2}

但问题是上面的正则表达式只返回最后一个参数,我想捕获所有参数。此参数也可以重复多次。我看不出有什么问题。有人可以帮帮我吗?

Exemples:

Exemple 1 {{url-builder: [linktitle], [email]}} // Return ['url-builder', 'email']
Exemple 2 {{url-builder: [linktitle]}} // Return ['url-builder', 'linktitle']

例子1应该返回['url-builder','link-title','email']

更具体地说,我有以下文字

  

Aocontráriodoque se acredita,LoremIpsumnãoésimplesmenteumtextorandômico。 Com mais de 2000 anos, {{url-builder:[linktitle],[email]}} suasraízespodemser encontradas em uma {{author-name}} obra de literaturalatinaclássicaartadade 45 AC。 Richard McClintock,教授de latim do Hampden-Sydney College,弗吉尼亚州,

从上面的文字中,我想要抓住所有标签{{tag}}。但是某些标记可​​以包含参数{{tag:parameter-1}},这些参数可以重复多次{{tag:parameter-1:parameter-1}}。我正在尝试使用标记和所有参数捕获单个数组。

1 个答案:

答案 0 :(得分:0)

是的,捕获组通常只存储其模式的最后一次出现。您可以将所有参数包装在一个组中以获取它们:

\{\{([\w\-]+):\s*((?:\[[\w\%]+\][,\s]*)*)\}\}
    ^       ^    ^                      ^

然后通过/[,\s]+/将其拆分以获得列表。