【发布时间】:2012-12-08 04:05:34
【问题描述】:
我想解析这种代码:
{articles mode="extrait" nb="3"}
我正在使用这个正则表达式:
@\{(articles)(?:(?:\s|\ )*(?:(\w+)="(\w+)"))*\}@
但它不起作用,当我做一个 preg_match_all 时,这是一个带有 $matches 参数的 print_r 的结果:
Array (
[0] => {articles mode="extraits" nb="3"}
[1] => articles
[2] => nb
[3] => 3
)
我认为最后一个 * 应该可以获取所有属性,而不仅仅是最后一个。
您是否看到缺少或不正确的内容?
提前谢谢你
【问题讨论】:
-
您正在重复一个捕获组,这会导致捕获组捕获最后一个匹配项。
-
我可以补充一点,在 PHP 中无法获得任意数量的捕获。正则表达式所能做的就是首先匹配整个块,然后在块上运行第二个正则表达式以提取所有属性(在单独的匹配中)
-
请查看类似问题的答案:stackoverflow.com/a/574968/1447613
标签: php regex parsing attributes preg-match-all