在正则表达式中获取组的多个匹配项

问题描述 投票:0回答:2

我试图使用正则表达式从BBCode获取属性让我说我有这些字符串:

[icons a="1" b='2' c="3"]
[icons d="4" e='5' f="6"]

我需要使用正则表达式来获取这样的匹配:

[
    {'a', '1', 'b', '2', 'c', '3'},
    {'d', '4', 'e', '5', 'f', '6'}
]

我想到了这个正则表达式:

\[icons[\w\s](?:(\w*)\=["|']([^"|']*))+.*?\]

但它只匹配:

[
    {'a', '1'},
    {'d', '4'}
]

我如何匹配所有属性?

另外,为了使其更具防弹性,有没有办法只匹配它找到的报价?

[icons a="1"] // GOOD
[icons a="1'] // BAD - But still a match

Regex101

php regex replace
2个回答
1
投票

我认为最好的方法是保持简单:

使用一个正则表达式匹配所有[icons...]

\[icons\b[^\[\]]*\]

并且在每个正则表达式匹配上迭代使用第二个正则表达式:

(\w+)=(['"])((?:(?!\2).)*)\2

请注意,第一组和第三组将包含所需的值,第二组包含引用。


0
投票

你必须使用这可能会对你有帮助

\[icons\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\]
© www.soinside.com 2019 - 2024. All rights reserved.