正则表达式非常新,并希望有人可以帮助我使用否定正则表达式搜索的语法。让我详细说明一下。如果找不到一个(或多个)多个条件,我想查看数据包/信息并触发肯定警报。
例如,如果我找不到以下一个或多个字符串,我想搜索数据包并触发正数:“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])
任何想法都会非常感激。
答案 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/
。而不是试图制作仅在aaa
和bbb
以及ccc
都不存在的情况下匹配的正则表达式,而只是匹配/aaa|bbb|ccc/
并否定结果。
if !match(/aaa|bbb|ccc/, packet)
# none of `aaa`, `bbb`, or `ccc` is present.
end