1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| #!/usr/bin/env perl
use strict;
use warnings;
use diagnostics;
my %unix_time_regex = (
"a" => qr/(\w{3})/,
"A" => qr/(\w+)/,
"b" => qr/(\w{3})/,
"B" => qr/(\w+)/,
"c" => qr/((:?\d{2}\/\d{2}\/\d{2})\s+(:?\d{2}:\d{2}:\d{2}))/,
"C" => qr/(\w{3}\s+\w{3}\s+\d{1,2}\s+(:?\d{2}:\d{2}:\d{2})\s+(:?.*)\s+\d{4})/,
"d" => qr/(\d{2})/,
"e" => qr/(\d{1,2})/,
"D" => qr/(\d{2}\/\d{2}\/\d{2})/,
"G" => qr/(\d+)/,
"h" => qr/(\w{3})/,
"H" => qr/(\d{2})/,
"I" => qr/(\d{2})/,
"j" => qr/(\d{3})/,
"k" => qr/(\d{1,2})/,
"l" => qr/(\d{1,2})/,
"L" => qr/(\d{1,2})/,
"m" => qr/(\d{2})/,
"M" => qr/(\d{2})/,
"n" => qr/(\n)/,
"o" => qr/(\d{1,2}(:?st|nd|rd|th))/,
"p" => qr/(AM|PM)/,
"P" => qr/(am|pm)/,
"q" => qr/([1-4])/,
"r" => qr/((:?\d{2}:\d{2}:\d{2})\s+(:?AM|PM))/,
"R" => qr/(\d{2}:\d{2})/,
"s" => qr/(\d+)/,
"S" => qr/(\d{2})/,
"t" => qr/(\t)/,
"T" => qr/(\d{2}:\d{2}:\d{2})/,
"U" => qr/(\d+)/,
"w" => qr/([0-6])/,
"W" => qr/(\d+)/,
"x" => qr/(\d{2}\/\d{2}\/\d{2})/,
"X" => qr/(\d{2}:\d{2}:\d{2})/,
"y" => qr/(\d{2})/,
"Y" => qr/(\d{4})/,
"Z" => qr/(\w+)/,
"z" => qr/([+-]?\d{4})/);
while (my $line = <DATA>)
{
chomp $line;
my ($string, $format) = split(', ', $line);
my @fmt_array = split(/\%/, $format);
my @reg_array = ();
foreach my $str_slice (@fmt_array)
{
print "$str_slice\n";
if (defined($unix_time_regex{$str_slice}))
{
$str_slice = $unix_time_regex{$str_slice};
}
push(@reg_array, $str_slice);
}
my $regex = join('',@reg_array);
print "$regex\n";
if ($string =~ m/$regex/)
{
print "Match \'$string\' with \'$format\': $1\n";
}
}
__DATA__
Wed, %a
Wednesday, %A
Feb, %b
February, %B
02/04/09 23:13:52, %c
Wed Feb 4 23:13:52 CET 2009, %C
04, %d
4, %e
02/04/09, %D
1517, %G
Feb, %h
23, %H
11, %I
035, %j
23, %k
11, %l
2, %L
02, %m
13, %M
4th, %o
PM, %p
pm, %P
1, %q
11:13:52 PM, %r
23:13, %R
1233785632, %s
52, %S
, %t
23:13:52, %T
5, %U
3, %w
5, %W
02/04/09, %x
23:13:52, %X
09, %y
2009, %Y
CET, %Z
+0100, %z |
Partager