[英]Need information on Grok patterns that use non capturing group (?: )
我了解使用捕获组和非捕获组编写正则表达式的概念。
例如:
a(b|c)
将匹配并捕获ab和ac
a(?:b|c)
将匹配ab和ac但捕获a
但是,当我制作一个新的自定义grok模式时它有什么用,以及使用非捕获组的含义是什么。
在下面的HOUR中查看一些现有的grok模式:
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
参数的默认值为True
,因此在Grok模式中已删除编号的捕获组或未捕获组之间的差异。 因此,默认情况下只能使用命名捕获(如a(?<myfield>b|c)
)创建字段。
我认为,优先选择普通Grok模式中的非捕获组,以便不依赖named_captures_only
参数设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.