use strict;
my $str = '2023-03-05T23:00:35.803942Z download 46.20.32.146:37117 10.0.28.135:81 0.000034 0.030235 0.000039 200 200 0 12719 "GET https://download.cylance.com:443/updates/CylanceDetectUpdater/3.1.1000.48/Cylance.Host.Versions.dll?AWSAccessKeyId=ASIAXGEMKUZOLIJU7ANT&Expires=1678143581&response-cache-control=No-cache&x-amz-security-token=FwoGZXIvYXdzEF4aDKZOKkZNWIHzKxCTuSKCAc9SM0qqQ4Cyq5EN69MjRSP4KklVkfKe3l%2FP9auMBc0GcenWYD5MSbBSpabg%2FHhg8iz9KkEEkHtceAp1hIQE25i%2BZldQHjEIrHXyDJZKMh4SK2i7AUegHhrh0bOzAstDH9PRRqm%2FUWbLOm5X26NHcQtA%2FFVJSOl8T9CE%2BxxGOFwmR38ov%2BuToAYyKGAsGRb9noEAnd2jZZub%2B8kUU5ipH5u9%2Ff79%2BFuMSu4SOWaJ3utlz2Q%3D&Signature=pktaTIw8ucS5fcQYGq40zAge6JE%3D HTTP/1.1" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2';
my $regex = qr/([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\s]+?)\" \"([^\s]+)\" \"([^ ]*)\" \"([^ ]*)\"/p;
if ( $str =~ /$regex/ ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html