2017-01-30 61 views
-1

我試圖根據消息過濾我們的特定陷阱並且遇到一些問題。我只需要刪除包含字符串「收到陷阱」的消息,但不包含「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_ 

但是,更換?!?=也匹配,想必?!應該失敗?

+1

嘗試'^。*(注意|警告|嚴重)\ s + [^ \(] + \ s + \([^)] + \):\ s + \ s + trap \ s + is \ s +收到了\ s + from(?!。* mxalFaultCode)。*' –

+0

編輯:我收回來了,看起來像我錯了!謝謝 –

+0

見https://regex101.com/r/gjkNHj/1 –

回答

0

的位置向前負外觀之前.*

即變化:

...from.*(?!mxalFaultCode) 

到(加上增加對空間的術語):

...from\s*(?!mxalFaultCode).* 

的問題,您的企圖是.*將消耗"mxalFaultCode"之前展望未來。

您也許可以通過使用更長的展望來簡化您的正則表達式。例如,如果只是需要"The trap"已經足夠了,你可以編寫代碼:

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

這意味着"The trap""mxalFaultCode"可能不會出現在任何地方(而(?!mxalFaultCode)意味着"mxalFaultCode"可能立即發生後)。

+0

感謝您的解釋,完美的工作:) –