2

对正则表达式非常陌生,希望有人可以帮助我否定正则表达式搜索的语法。让我详细说明。如果未找到多个标准中的一个(或多个),我想查看数据包/信息并触发肯定警报。

例如,如果我找不到以下一个或多个字符串,我想搜索一个数据包并触发肯定:“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])

任何想法将不胜感激。

4

2 回答 2

0

你的第一个

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

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

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

这两个都在进行前瞻,它们实际上不会匹配任何东西,请参阅此处了解更多信息。

我认为您正在寻找的是:

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

如果连续出现三个或更多时间,则匹配 a、b 或 c,因此在 saaambbbmccc 中它将匹配:

aaa
bbb
ccc

(?i)使得匹配不区分大小写,所以如果你有aAa它仍然会匹配。

如果我误解了您的要求,请告诉我,我会修改我的答案,希望对您有所帮助。

于 2015-03-20T14:13:53.110 回答
0

If you are looking for the absence of a regular expression, it is easiest to negate the result of the match.

In your example, you want to show that /aaa|bbb|ccc/ is not present in a packet. Rather than trying to craft a regex that only matches if aaa and bbb and ccc are all absent, just match against /aaa|bbb|ccc/ and negate the result.

if !match(/aaa|bbb|ccc/, packet)
    # none of `aaa`, `bbb`, or `ccc` is present.
end
于 2015-03-20T16:32:37.410 回答