Во-первых, если вы новичок в Perl, одной из сильных сторон является CPAN и множество решений.Не изобретайте колесо!
Существует замечательный модуль Date :: Parse , который будет анализировать часть времени для вас.Тогда единственная проблема с регулярным выражением, которая у вас есть, - это выделение временной части вашей строки.
Исходя из вашего однострочного примера, этот код будет делать:
use strict;
use warnings;
use Date::Parse;
my $line="Sat 02-August-2008 20:47 - 123.112.3.209 - \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;";
my $tmpart;
if ($line=~ /^(.*\d+:\d+) -/) {
$tmpart=$1;
print "Time part = $tmpart\n";
my $time=str2time($tmpart);
my ($ss,$mm,$hh,$day,$month,$year,$zone) = strptime($tmpart);
$year+=1900;
$month+=1;
print "Unix time: $time\n";
print "Parsed time: $month/$day/$year $hh:$mm:$ss \n\n";
}
else {
warn "no match!\n";
}
Это вернет номер времени Unix, с которым потом легко работатьИли (как показано) вы можете анализировать отдельные компоненты времени.