使用?>在Logstash Grok模式中

时间:2015-06-05 14:25:09

标签: regex logstash logstash-grok

一些标准Logstash Grok patterns使用?>语法,我在正则表达式中从未见过它,并且似乎不是标准语法。

UNIXPATH示例:

(?>/(?>[\w_%!$@:.,-]+|\\.)*)+

?>的用法是什么意思?这是一种奇怪的前瞻吗?

2 个答案:

答案 0 :(得分:2)

这是一个atomic group

  

原子组是一个组,当正则表达式引擎从它退出时,会自动抛弃组内任何令牌记住的所有后退位置

我没有看到在你的情况下使用它的任何动机,除了使正则表达式更快(假设不可能简单地为外部字符串开始字符串锚点,并且在字符范围之后删除+对内部人来说可能是一个更好的解决方案。)

答案 1 :(得分:2)

它是.NET,PCRE和许多其他正则表达式引擎的标准。但是,JavaScript中没有。

来自SO answer

  

原子组(以及possessive modifier)有助于避免   catastrophic backtracking - 可被恶意用户利用   通过吞噬服务器的内存来触发拒绝服务攻击。

When are Atomic Groups Important?

  

当一系列字符仅作为块使用时,使用   原子团可以防止不必要的回溯。这是探索   关于占有量词的部分。在这种情况下原子   量词可能很有用,但不一定是关键任务。

     

另一方面,有些情况下原子量词可以   从灾难中保存你的模式。它们特别有用:

     

✽为了避免使用包含惰性模式的Lazy Trap   量词可以吃掉分隔符的量词✽避免某些形式   Explosive Quantifier Trap