我有以下字符串:
testInputs.abc_def.alpha=abc^ORtestVars.var23.nameISEMPTY^testInputs.alpha_bravo.more.otheroneCONTAINSsomething^testVars.anotherone!=abc^testVars.mYVar!=abc
我需要它来匹配
testInputs.abc_def.alpha
testVars.var23.name
testInputs.alpha_bravo.more.otherone
testVars.anotherone
testVars.mYVar
我可以匹配所有出现的情况,但问题是它还匹配一些不应该匹配的运算符:
空 包含
(还有很多其他的,比如 IN、NOT IN 等)
我有一个数组,可以连接它来创建替换,但问题是在没有禁止的子字符串的情况下保持匹配。就目前情况而言,而不是
testVars.var23.name
我最终
testVars.var23.nameISEMPTY
同样,我匹配
testInputs.alpha_bravo.more.otheroneCONTAINS
目前的规则是:
testInputs.
或 testVars.
到目前为止我已经尝试过以下方法:
(({{)?(?:testInputs\.|testVars\.)[a-zA-Z0-9_\.]+(}})?)
并尝试了前瞻/后瞻的一些变体
(?!CONTAINS|ISEMPTY)
但是未能成功排除无效子字符串,同时仍然匹配我正在寻找的匹配部分。
您可以将每个字符与否定查找头模式匹配,以排除已知关键字(随意添加更多):
(?:testInputs|testVars)\.(?:[\w.](?!ISEMPTY|CONTAINS|OR|IN|[^\w.]))*\w