Части номера версии имеют значения int , следовательно, имеет смысл использовать INT
вместо NUMBER
, что соответствует не только целочисленным значениям.
Кроме того,точка должна быть экранирована, чтобы соответствовать буквальной точке.
Использовать
%{INT:major}\.%{INT:minor}\.%{INT:patch}
Тест:
Подробнее:
Шаблоны доступны в хранилище logstash :
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]+)))
и не соответствует входной строке , потому что атомная группа (?>...)
соответствует точке как части числа с плавающей запятой и никогда не возвращает ее, так как обратное отслеживание не разрешено в атомарной группеузоры.