У вас есть +08:00
на входе, но -?
в (?:Z|-?\d\d:\d\d)?
учитывает только отрицательное значение или значения без знака.
Таким образом, в первой строке регулярных выражений вы должны заменить -?
на [+-]?
, чтобы соответствовать необязательному -
или +
.Кроме того, поскольку деталь +08:00
не должна входить в группу 1, я предлагаю использовать группу сброса ветвей , (?|...|...)
, чтобы объединить разные детали внутри группы в одну группу, группа 1:
(?|(\d{6}\s+\d{1,2}:\d\d:\d\d)|(\d{4}-\d{1,2}-\d{1,2}T\d\d:\d\d:\d\d\.\d+)(?:Z|[-+]?\d\d:\d\d)?)?
^^^ ^ ^ ^ ^^^^
Фиксированный шаблон:
my $genlog_line_1= qr{
\A
(?|(\d{6}\s+\d{1,2}:\d\d:\d\d)|(\d{4}-\d{1,2}-\d{1,2}T\d\d:\d\d:\d\d\.\d+)(?:Z|[-+]?\d\d:\d\d)?)? # Timestamp
\s+
(?:\s*(\d+)) # Thread ID
\s
(\w+) # Command
\s+
(.*) # Argument
\Z
}xs;
См. regex demo .
Обратите внимание на ?
после того, как группа сброса скобок может не понадобитьсяесли TIMESTAMP всегда присутствует на входе.