需要有关使用非捕获组 (?:) 的 Grok 模式的信息
Need information on Grok patterns that use non capturing group (?: )
我了解使用捕获组和非捕获组编写正则表达式的概念。
例如:
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)
Grok 中带有或不带有捕获组的模式的区别在于您是否需要创建字段。
(?:2[0123]|[01]?[0-9])
模式包含一个非捕获组,仅用于分组 子模式序列。 (2[0123]|[01]?[0-9])
正则表达式包含一个 编号的捕获组 ,它匹配并捕获值(=存储在一些额外的缓冲区中,其 ID 等于模式中捕获组的顺序)。请注意,还有 命名捕获组 ,例如 (?<field>2[0123]|[01]?[0-9])
将捕获的值分配给命名组。
将 named_captures_only
参数设置为 false,a(b|c)
正则表达式将匹配 ab
或 ac
并分配一个 b
或 c
到一个单独的字段。当您使用 非捕获组 a(?:b|c)
时,将永远不会创建任何字段,只会匹配此文本。
由于 named_captures_only
parameter 默认值为 True
,Grok 模式中删除了 编号 捕获组或非捕获组之间的差异。因此,默认情况下只能使用命名捕获(如 a(?<myfield>b|c)
)来创建字段。
我认为优先考虑普通 Grok 模式中的非捕获组,以便不依赖于 named_captures_only
参数设置。
我了解使用捕获组和非捕获组编写正则表达式的概念。
例如:
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)
Grok 中带有或不带有捕获组的模式的区别在于您是否需要创建字段。
(?:2[0123]|[01]?[0-9])
模式包含一个非捕获组,仅用于分组 子模式序列。 (2[0123]|[01]?[0-9])
正则表达式包含一个 编号的捕获组 ,它匹配并捕获值(=存储在一些额外的缓冲区中,其 ID 等于模式中捕获组的顺序)。请注意,还有 命名捕获组 ,例如 (?<field>2[0123]|[01]?[0-9])
将捕获的值分配给命名组。
将 named_captures_only
参数设置为 false,a(b|c)
正则表达式将匹配 ab
或 ac
并分配一个 b
或 c
到一个单独的字段。当您使用 非捕获组 a(?:b|c)
时,将永远不会创建任何字段,只会匹配此文本。
由于 named_captures_only
parameter 默认值为 True
,Grok 模式中删除了 编号 捕获组或非捕获组之间的差异。因此,默认情况下只能使用命名捕获(如 a(?<myfield>b|c)
)来创建字段。
我认为优先考虑普通 Grok 模式中的非捕获组,以便不依赖于 named_captures_only
参数设置。