如何在regex后面实现可变宽度外观以获取项目列表?

时间:2014-11-25 16:29:27

标签: php regex lookbehind

我有一个项目列表,在这种情况下以其类型为前缀' fruits' ,现在我需要所有水果及其计数的清单

fruits 5 apples, 2 oranges, 3 bananas

我试过的正则表达式

(?<=fruits\s)((?<count>\d{1,})\s(?<fruit>\w{1,},))

但是这让我得到了第一个水果及其数量,但是我想要所有水果的清单和它们的数量,所以我尝试了这个

(?<=fruits\s((?:\d{1,})\s(?:\w{1,},))*)((?<count>\d{1,})\s(?<fruit>\w{1,},))

但我得到的错误是看后面应该是固定的宽度!

我在这里尝试了一个示例:http://regex101.com/r/oE6jJ1/1

2 个答案:

答案 0 :(得分:2)

使用以下正则表达式从组索引1获取计数,从组索引2获取水果名称。

(?:^fruits|(?<!^)\G)\h*\K(?<count>\d*)\h*(?<fruit>\w*)

DEMO

答案 1 :(得分:0)

^(?!fruits).*$|((?<count>\d{1,})\s(?<fruit>\w{1,}))

试试这个。捕获。参见演示。

http://regex101.com/r/oE6jJ1/10