问题描述
我正在寻找匹配字符串模式的帮助(tostring() 生成):
MyObject{nothingSpecial='Word1',secretData='Word2',privateEmail='Word3'}
我想要一个可以匹配 Word1、Word3 的模式。所以我想出了:
(?x)(["]?(nothingSpecial|secretData)["]?\s*[:=]{1}\s*["]?)(?:[^"\n,]+)
那行得通,但现在我需要加强它,以便我也可以匹配对象名称,例如MyObject
示例:
-
不匹配,因为它不是
MyObject
:YourObject{nothingSpecial='Word1',privateEmail='Word3'} -
与 MyObject 匹配,因此查找 nothingSpecial 和 privateEmail:MyObject { nothingSpecial='Word1',privateEmail=' Word3'}
-
不匹配,因为它不是
MyObject
:TheirObject{nothingSpecial='Word1',privateEmail='Word3'}
说实话,我从来都不是一个出色的 RegEx,因此非常感谢您的帮助。
解决方法
要匹配 3 个单词,您可以使用 if \G
锚
(?:\b(MyObject)\h*\{\h*(?=[^{}]*})|\G(?!^))(?:(?:nothingSpecial|privateEmail)='([^'\n,]+)'|[^\s=]+='[^'\n,]*')(?:,\h*)?
-
(?:
非捕获组-
\b(MyObject)\h*\{\h*
在 group 1 中捕获MyObject
并匹配{
(?=[^{}]*})
-
|
或 -
\G(?!^)
断言上一场比赛结束时的位置
-
-
)
关闭非捕获组 -
(?:
非捕获组-
(?:nothingSpecial|privateEmail)=
匹配nothingSpecial
或privateEmail
后跟=
-
'([^'\n,]+)'
捕获 group 2 匹配除'
单引号之间的换行符或逗号以外的任何字符 -
|
或 -
[^\s=]+='[^'\n,]*'
用单引号匹配键值对
-
-
)
关闭非捕获组 -
(?:,\h*)?
(可选)匹配逗号和水平空白字符