Win8 Strawberry 5.8.9.5 (32) Mon 08/16/2021 20:36:57 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings use Data::Dump qw(dd); for my $s ( '2021-08-16 foo a=bcd bar', '2021-08-17 foo a=bcd', '2021-08-18 a=bcd', '2021-08-19 a=b', '2021-08-20 a=', '2021-08-21 ', '2021-08-22', 'xyzzy', ) { my $matched = $s =~ /(\d\d\d\d-\d\d-\d\d) .*(?:a=([a-z]+))?/ # .* greedy - fails all # /(\d\d\d\d-\d\d-\d\d) .*?(?:a=([a-z]+))?/ # .*? lazy - fails some # /(\d\d\d\d-\d\d-\d\d) (?:.*a=([a-z]+))?/ # works # /(\d\d\d\d-\d\d-\d\d) (?:.*?a=([a-z]+))?/ # works ; dd $s, $1, $2 if $matched; # dd $s, $1, $2; # ??? } ^Z ("2021-08-16 foo a=bcd bar", "2021-08-16", undef) ("2021-08-17 foo a=bcd", "2021-08-17", undef) ("2021-08-18 a=bcd", "2021-08-18", undef) ("2021-08-19 a=b", "2021-08-19", undef) ("2021-08-20 a=", "2021-08-20", undef) ("2021-08-21 ", "2021-08-21", undef)