我想过滤一组键和值。所有键和非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)只是说:如果右侧紧邻AAAAA,则匹配失败。但是要消耗的下一个字符是:,因此超前总是返回true,并且是多余的。

如果您的键由字符char组成,则可以使用

\b(?!AAA?:)\w+:[^;]*;


请参见regex demo

细节


\b-单词边界
(?!AAA?:)-如果当前位置右侧紧邻有两个或三个A后跟:,则负向超前匹配失败
\w+-1个以上的字符字符
:-一个:
[^;]*-除;以外的0多个字符
;-一个;

关于regex - 正则表达式否定超前断言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53012485/

10-12 17:48
查看更多