正则表达式否定超前断言

时间:2018-10-26 16:03:15

标签: regex

我想过滤一组键和值。所有键和非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/

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

超前构造的宽度为零,它不使用其模式匹配的文本。因此,您的(?!AA|AAA)只是说:如果右边紧邻AAAAA,则匹配失败。但是要消耗的下一个字符是:,因此超前总是返回true,并且是多余的。

如果您的键包含字符char,则可以使用

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

请参见regex demo

详细信息

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