一些标准Logstash Grok patterns使用?>
语法,我在正则表达式中从未见过它,并且似乎不是标准语法。
UNIXPATH示例:
(?>/(?>[\w_%!$@:.,-]+|\\.)*)+
?>
的用法是什么意思?这是一种奇怪的前瞻吗?
答案 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