2013-07-06 5 views
0

Я пытаюсь сделать это «ServerLog (07-05-2013 @ 22-07)» в регулярное выражение.Как я могу сделать это в regex

my $filename = q{ServerLog((\d+)-(\d+)-(\d+)@(\d+)-(\d+))}; 

Это то, что у меня есть, но оно не работает. Какие-либо предложения?

EDIT: Будет ли это работать?

my $filename = q{ServerLog\((\d+)-(\d+)-(\d+)@(\d+)-(\d+)\)}; 
my $log = "<D:\\ServerTools\\Logs\\$filename"; 
my $ref = tie *FH,"File::Tail",(name=>$log); 
+0

- это '$ filename' имя переменной *, содержащее * регулярное выражение, или вы пытаетесь совместить' $ filename' с регулярным выражением? – doubleDown

+0

Имя переменной, содержащей регулярное выражение, находится в каталоге. – user2202426

ответ

5

Вам нужно бежать первую и последнюю скобку с \, так как вы хотите, чтобы соответствовать фактической скобке в строке:

/ServerLog\((\d+)-(\d+)-(\d+)@(\d+)-(\d+)\)/ 

так:

my $string = 'ServerLog([email protected])'; 

if($string =~ /ServerLog\((\d+)-(\d+)-(\d+)@(\d+)-(\d+)\)/) { 
    print "matches"; 
} 
0

Вы должны пространственное из сложного регулярного выражения с использованием переключателя/x:

my $server_log_qr = qr{ 
     ServerLog 
     \(
     (\d{2})  # capture month 
     \- 
     (\d{2})  # capture day 
     \- 
     (\d{4})  # capture year 
     \@ 
     (\d{2})  # capture hour 
     \- 
     (\d{2})  # capture minute 
     \) 
    }msx; 

my $example = 'ServerLog([email protected])'; 
print "$example\n"; 

my ($month, $day, $year, $hour, $minute) = $example =~ $server_log_qr; 
print "month = $month\n"; 
print "day = $day\n"; 
print "year = $year\n"; 
print "hour = $hour\n"; 
print "minute = $minute\n"; 
Смежные вопросы