2013-01-13 76 views
0

我已經嘗試了幾個類似問題的答案,但沒有一個適用於我正在嘗試做的工作。正則表達式:查找排除特定詞組的匹配

我試圖找到匹配特定短語(使用通配符)的文本,但排除了包含第二個短語的任何短語。

正確:約翰打哈欠。

不正確:約翰張大嘴巴打了個哈欠。

本質上,我想匹配「(某人)打哈欠。」但沒有關閉「(某人)張大了嘴巴,打了個哈欠。」因此,「張大了嘴巴,」是排斥的對手,但我似乎無法讓它起作用。

不幸的是,我正在使用日誌解析應用程序,所以我不知道正在使用什麼語言。

+1

這可能有兩個子測試(具體取決於語言您使用)可以輕鬆解決。 –

+0

那是什麼語言? – fge

+0

在原文中增加了關於該語言的信息。 – user1973947

回答

2

您可能需要一個否定的後視圖,如(?<!opens his mouth wide and)yawns。請注意,這些可能會降低正則表達式匹配算法的速度,並且無法在任何地方使用。

你真的應該你的測試用例減少到簡單的模式(例如* BC而不是ABC)

+0

但是請注意,並非所有的方言都支持逆向查看 - 特別是JavaScript(又名ECMA 262)正則表達式不支持它們。 – fge

+0

@fge:正好。當問正則表達式問題時,指定環境是很好的。 – dan3

+0

我還沒有能夠完全測試它,但我認爲這可能會導致解決方案。我可以通過使用(?<!opens \ shis \ smouth \ swide \ sand \ s)打哈欠來正確觸發正確的短語。$ – user1973947