Regex 正则表达式负前瞻问题

Regex 正则表达式负前瞻问题,regex,Regex,我正在尝试根据消息筛选我们的特定Trap,但遇到了一些问题。我只需要删除包含字符串“陷阱来自”但不包含“mxalFaultCode”(按此顺序)的消息 目前,我正在使用以下工具: .*(Attention|Warning|Critical)\s+[^\(]+\s+\([^\)]+\):\s+The\s+trap\s+is\s+received\s+from.*(?!mxalFaultCode) 这与文本相匹配: _blaa_The trap is received from_blaa_mxal

我正在尝试根据消息筛选我们的特定Trap,但遇到了一些问题。我只需要删除包含字符串“陷阱来自”但不包含“mxalFaultCode”(按此顺序)的消息

目前,我正在使用以下工具:

.*(Attention|Warning|Critical)\s+[^\(]+\s+\([^\)]+\):\s+The\s+trap\s+is\s+received\s+from.*(?!mxalFaultCode)
这与文本相匹配:

_blaa_The trap is received from_blaa_mxalFaultCode_blaa_

但是,更换
?=
也匹配,当然是
应该失败吗?

将负片前瞻定位在
*
之前:

ie更改:

...from.*(?!mxalFaultCode)
至(加上为空格添加术语):

您尝试的问题是,
*
将在应用前瞻之前消耗
“mxafaultcode”

您还可以通过使用更长的前瞻性来简化正则表达式。例如,如果只需要
“陷阱”
就足够了,您可以编写以下代码:

...The trap(?!.*mxalFaultCode).*

这意味着
“mxafaultcode”
可能不会出现在
“陷阱”
之后的任何地方(而
(?!mxafaultcode)
意味着
“mxafaultcode”
可能会立即出现)。

尝试
^.*(注意|警告|严重)\s+[^\(]+\s+\([^)]+):\s+s+trap\s+是从(?*mxafaultcode)收到的.*
Edit:我把它拿回去了,看起来好像我拍错了!谢谢
...The trap(?!.*mxalFaultCode).*