2016-01-28 90 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)。这是一个逻辑错误。 –

相关问题