2016-01-28 138 views
1

在Splunk中我有很多字段提取用於從URI中提取值。我有幾個匹配特定模式,我現在想要另一個正則表達式匹配任何東西,但這些。正則表達式,匹配除這些字符串之外的任何字符

^/SiteName/[^/]*/(?<a_request_type>((?!Process)|(?!process)|(?!Assets)|(?!assets))[^/]+) 

上面的正則表達式是我到目前爲止。我在等待負面預測,以防止匹配流程,流程,資產或資產。然而,看起來,這些lookahead之後的[^ /] +可以繼續前進並匹配這些字符串。在這個正則表達式有時會覆蓋我寫的接受這些字符串的其他正則表達式

對於使正則表達式匹配任何字符串的正確語法,除了在負向lookaheads中指定的字符串?

謝謝!

回答

2

消極lookaheads 不消耗任何正在搜索的字符串。當您需要多個負向預覽時,不需要將它們與|(OR)分開。試試這個:

^/SiteName/[^/]*/(?<a_request_type>((?![Pp]rocess)(?![Aa]ssets))[^/]+) 

注意,我結合你的向前看符號([Pp]rocess[Aa]ssets),使正則表達式更簡潔。

Live test

+0

這是賓果! 謝謝你 – dahui

+1

我知道,發佈後3分鐘內我無法標記它。 5秒鐘;) – dahui

+1

我認爲你可以進一步減少到'(?![Pp] rocess | [Aa] ssets)'。 @dahui'\ b(?:(?!foo)|(?!bar))\ w +'[仍然可以是foo或bar](https://regex101.com/r/xW7zC2/1)。但是'\ b(?!foo | bar)\ w +'[不能是](https://regex101.com/r/kO9wG6/1)。這是一個邏輯錯誤。 –

相關問題