【发布时间】:2016-07-08 16:34:51
【问题描述】:
我了解使用捕获组和非捕获组编写正则表达式的概念。
例如:
a(b|c) 将匹配并捕获 ab 和 ac
a(?:b|c) 将匹配 ab 和 ac 但捕获 a
但是,当我创建一个新的自定义 grok 模式时它有什么用,以及使用非捕获组意味着什么。
查看一些现有的 grok 模式,如下面的 HOUR:
HOUR (?:2[0123]|[01]?[0-9])
在这里,我们也可以使用(2[0123]|[01]?[0-9]) 匹配小时格式。
是什么让 grok 模式在这里使用非捕获表达式?基于什么参数我应该决定使用这个(?:subex)
【问题讨论】:
-
我不知道您使用的是什么语言,但我认为这是完全错误的。
a(b|c)通常会捕获b或c(取决于模式是否匹配ab或ac),而a(?:b|c)根本不会捕获任何内容。区别在于性能之一;为什么在你不需要做的时候捕捉一些东西? -
Re "这里我们也可以使用
(2[0123]|[01]?[0-9])匹配小时格式",这并不奇怪;捕获不会改变模式匹配的内容。
标签: regex logstash-grok