匹配 grok 中的版本号部分
Match version number parts in grok
我想使用 grok 过滤器将版本字符串(例如 2.3.5)拆分为三个字段(major.minor.patch)。
我尝试了什么:
%{NUMBER:major}.%{NUMBER:minor}.%{NUMBER:patch}
来自 Grok debugger 的结果:
No Matches
我的预期:
{
major: 2,
minor: 3,
patch: 5
}
版本号的部分是 int 值,因此,使用 INT
而不是 NUMBER
是有意义的,它不仅匹配整数值。
此外,必须对点进行转义以匹配文字点。
使用
%{INT:major}\.%{INT:minor}\.%{INT:patch}
测试:
更多详情:
模式可用在logstash repository:
INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
因此,${NUMBER}...
产生的模式是
(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
并且它 does not match the input string 因为 (?>...)
原子组将点匹配为浮点数的一部分并且永远不会返回它,因为不允许回溯到原子组模式中。
我想使用 grok 过滤器将版本字符串(例如 2.3.5)拆分为三个字段(major.minor.patch)。
我尝试了什么:
%{NUMBER:major}.%{NUMBER:minor}.%{NUMBER:patch}
来自 Grok debugger 的结果:
No Matches
{
major: 2,
minor: 3,
patch: 5
}
版本号的部分是 int 值,因此,使用 INT
而不是 NUMBER
是有意义的,它不仅匹配整数值。
此外,必须对点进行转义以匹配文字点。
使用
%{INT:major}\.%{INT:minor}\.%{INT:patch}
测试:
更多详情:
模式可用在logstash repository:
INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
因此,${NUMBER}...
产生的模式是
(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))).(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
并且它 does not match the input string 因为 (?>...)
原子组将点匹配为浮点数的一部分并且永远不会返回它,因为不允许回溯到原子组模式中。