我有以下文字(可以是无数的定界对):
zz=yy /* animal=cat,AA=bb, qqq=dd */ yyy=ttt
我想使用正则表达式在代码注释中获取所有分隔字符串的匹配项:
1. animal=cat
2. AA=bb
3. qqq=dd
但不是:zz = yy或yyy = ttt
更新: 我已经测试了建议的模式(一切都很好,我学到了很多东西,谢谢)。我继续进行实验,发现了以下模式:
(?:\/\*\s*|\G\s*,\s*)(?:(\w+)=(\w+)(?:\s*\*\/)?)
需要更少的步骤,也可以处理多行。您认为此解决方案有任何问题吗?
答案 0 :(得分:2)
一个选项是
(\b\w+)=(\w+\b)(?=(?:(?!\/\*).)*\*\/)
用通俗易懂的语言,这意味着:在=
对之后,先查找(不包含/*
子字符串的字符),然后是*/
。
https://regex101.com/r/Dvx99F/1
采用更少步骤的替代方法,而是从/*
开始进行匹配:
(?:\/\*|\G(?!^))(?:(?!\*\/|\/\*).)*?(\b\w+)=(\w+\b)
答案 1 :(得分:1)
如果您的引擎支持\G
,则可以使用
(?:\G(?!\A)|/\*)
(?:(?:(?!\*/)[\s\S])+?)
(?P<key>\w+)=(?P<value>\w+)
(?:\G(?!\A)|/\*) # match /* or at the end of the last match
(?:(?:(?!\*/)[\s\S])+?) # fast-forward
(?P<key>\w+)=(?P<value>\w+) # key/value pair