我想过滤一组键和值。所有键和非aaa或aaa键的值都应该匹配。当前,密钥既不匹配,也不排除密钥aa和aaa。
reg exp:(?!AA | AAA):。+ ?;
测试字符串:AA:1; AB:2; AC:3; AAA:4; AAB:5; AAC:6;
预期:AB:2; AC:3; AAB:5; AAC:6;
例如:https://regex101.com/r/AyW9PY/1/
我很感谢您的帮助。
最佳答案
前瞻结构的宽度为零,它不使用其模式匹配的文本。因此,您的(?!AA|AAA)
只是说:如果右侧紧邻AA
或AAA
,则匹配失败。但是要消耗的下一个字符是:
,因此超前总是返回true,并且是多余的。
如果您的键由字符char组成,则可以使用
\b(?!AAA?:)\w+:[^;]*;
请参见regex demo
细节
\b
-单词边界(?!AAA?:)
-如果当前位置右侧紧邻有两个或三个A
后跟:
,则负向超前匹配失败\w+
-1个以上的字符字符:
-一个:
[^;]*
-除;
以外的0多个字符;
-一个;
。关于regex - 正则表达式否定超前断言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53012485/