在正则表达式中获取一组的多个匹配项
Get multiple matches of a group in regular expression
我正在尝试使用正则表达式从 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
我认为最好的方法是保持简单:
使用一个正则表达式匹配所有 [icons...]
:
\[icons\b[^\[\]]*\]
和第二个正则表达式迭代地用于这个正则表达式的每个匹配:
(\w+)=(['"])((?:(?!).)*)
请注意,第一组和第三组将包含您想要的值,第二组包含引号。
你必须使用这个,也许这会对你有所帮助
\[icons\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\]
我正在尝试使用正则表达式从 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
我认为最好的方法是保持简单:
使用一个正则表达式匹配所有 [icons...]
:
\[icons\b[^\[\]]*\]
和第二个正则表达式迭代地用于这个正则表达式的每个匹配:
(\w+)=(['"])((?:(?!).)*)
请注意,第一组和第三组将包含您想要的值,第二组包含引号。
你必须使用这个,也许这会对你有所帮助
\[icons\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\s(\w)[=]["|'](\d)["|']\]