我正在寻找匹配字符串模式的帮助(tostring() 生成):
MyObject{nothingSpecial='Word1', secretData='Word2', privateEmail='Word3'}
我想要一个可以匹配 Word1、Word3 的模式。所以我想出了:
(?x)(["]?(nothingSpecial|secretData)["]?\s*[:=]{1}\s*["]?)(?:[^"\n,]+)
那行得通,但现在我需要加强它,以便我也可以匹配对象名称,例如MyObject
不匹配,因为它不是 MyObject
:YourObject{nothingSpecial='Word1', secretData='Word2', privateEmail='Word3'}
与 MyObject 匹配,因此查找 nothingSpecial 和 privateEmail:MyObject { nothingSpecial='Word1', secretData='Word2', privateEmail=' Word3'}
不匹配,因为它不是 MyObject
:TheirObject{nothingSpecial='Word1', secretData='Word2', 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*)?
(可选)匹配逗号和水平空白字符