关于否定正则表达式/外观搜索的建议

时间:2015-03-20 13:42:48

标签: regex regex-negation regex-lookarounds negate

正则表达式非常新,并希望有人可以帮助我使用否定正则表达式搜索的语法。让我详细说明一下。如果找不到一个(或多个)多个条件,我想查看数据包/信息并触发肯定警报。

例如,如果我找不到以下一个或多个字符串,我想搜索数据包并触发正数:“aaa”,“bbb”或“ccc”。

我尝试了以下逻辑,但它不起作用,因为它会触发任何标准而不是aaa | bbb | ccc,即使这些字符串在数据包的其他地方也可以找到。

(\b[a-z0-9]+)\b(?<!\aaa|bbb|ccc)

我尝试过的其他类似论据不起作用。

(!(?=.*[Aa][Aa][Aa])|(?=.*[Bb][Bb][Bb]))
(!?=.*[Aa][Aa][Aa])(!?=.*[Bb][Bb][Bb])

任何想法都会非常感激。

2 个答案:

答案 0 :(得分:0)

你的第一个

(\b[a-z0-9]+)\b(?

这匹配出现一次或多次的任何字母或数字,这意味着它会匹配任何内容,假设(?是一个错误,因为如果出现这个匹配(

(!(?=.*[Aa][Aa][Aa])|(?=.*[Bb][Bb][Bb]))
(!?=.*[Aa][Aa][Aa])(!?=.*[Bb][Bb][Bb])

这两个都在做前瞻,他们实际上不会匹配任何内容,请参阅here以获取更多信息。

我认为你所寻找的是:

(?i)(a|b|c){3}

如果连续出现三次或更多次,则匹配a,b或c saaambbbmccc它将匹配:

aaa
bbb
ccc

(?i)会使匹配大小写不敏感,因此如果您有aAa,则仍会匹配。

如果我误解了你的要求让我知道,我会修改我的答案,希望这有帮助。

答案 1 :(得分:0)

如果您正在寻找正则表达式的缺席,最容易否定匹配的结果。

在您的示例中,您希望显示数据包中不存在/aaa|bbb|ccc/。而不是试图制作仅在aaabbb以及ccc都不存在的情况下匹配的正则表达式,而只是匹配/aaa|bbb|ccc/并否定结果。

if !match(/aaa|bbb|ccc/, packet)
    # none of `aaa`, `bbb`, or `ccc` is present.
end