我希望用這種格式的「d days,h:mm:ss」(或「h:mm:ss」如果設備不超過一天了時間,但我可以計劃如何以檢查)Perl:如何從「d days,h:mm:ss」中提取
我問的是一個例行如何提取它的d
,h
,mm
和ss
從字符串所以我可以做計算(使用DateTime我也在這裏找到)
我希望用這種格式的「d days,h:mm:ss」(或「h:mm:ss」如果設備不超過一天了時間,但我可以計劃如何以檢查)Perl:如何從「d days,h:mm:ss」中提取
我問的是一個例行如何提取它的d
,h
,mm
和ss
從字符串所以我可以做計算(使用DateTime我也在這裏找到)
這可以用一個簡單的正則表達式與一些捕獲組解決。
這需要一段時間格式化爲「d days,h:mm:ss」,並且會給你日子,小時,分鐘和秒鐘。
#!/usr/bin/perl
use strict;
use warnings;
# Define a random time
my $time = '4 days, 03:44:23';
# Extract the data from the time
my ($days, $h, $m, $s) = $time =~ m/([0-9]+)\sdays,\s([0-9]+):([0-9]+):([0-9]+)/;
# Print the output
print 'time: '.$time."\n\n";
print 'days: '.$days."\n";
print 'h : '.$h."\n";
print 'm : '.$m."\n";
print 's : '.$s."\n";
有關如何使用正則表達式您可能會發現更多的信息,這是很有幫助的:perlre (regular expression tutorial)
此外,由於你是新來使用Perl,我會補充一點,你應該總是在的添加use strict;
和use warnings;
代碼的頂部。它會阻止你犯愚蠢的錯誤(例如試圖使用一個未定義的變量),併爲你節省很多頭痛。
您還可以通過將該匹配放在if
語句中來驗證您是否有良好的數據。養成這樣做的習慣是件好事。
my ($days, $h, $m, $s);
if ($time =~ m/([0-9]+)\sdays,\s([0-9]+):([0-9]+):([0-9]+)/) {
($days, $h, $m, $s) = ($1, $2, $3, $4)
}
else {
die "Invalid date format encountered!";
}
因爲這看起來像一個可教時刻,我要補充的是tjwrona1992的正則表達式
my ($days, $h, $m, $s) = $time =~ m/([0-9]+)\sdays,\s([0-9]+):([0-9]+):([0-9]+)/;
可以使用/ x修飾符,允許空格被寫入和意見,使其更易消化人類消費者:
my ($days, $h, $m, $s) = $time =~ m/
([0-9]+) \s days, # $1 will be days
\s
([0-9]+) : # $2 = hours
([0-9]+) : # $3 = minutes
([0-9]+) # $4 = seconds
/x or die "the regex did not match '$time'";
也謝謝你!我現在可以選擇 – Arjan
'DateTime :: Format :: Duration'將是一種方法。 – hobbs