正则表达式以小时和秒为单位获得时间

时间:2016-07-13 05:42:58

标签: perl

我正在以这种格式12/Jul/2016:13:26:23获得时间。

现在我希望得到时间13Hour 26Min and 23Seconds

我们如何通过正则表达式在Perl中执行此操作?我试过这个,但我无法做到这一点

$line =~ /^.+?\:(.+)/

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:2)

您已经运行良好的正则表达式解决方案,但仅供比较,我将如何使用Time::Piece

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

my $date_str = '12/Jul/2016:13:26:23';
my $date_fmt = '%d/%b/%Y:%H:%M:%S';

my $date = Time::Piece->strptime($date_str, $date_fmt);

say $date->hour, ' hours, ', $date->minute, ' minutes, ',
    $date->second, ' seconds';

答案 1 :(得分:1)

有许多最优秀的日期时间模块,但鉴于不寻常的输出格式和简单输入,也许正则表达式是一个很好的解决方案。

my ($day, $mon, $year, $hour, $minute, $sec) = 
    $line =~ m|(\d+)/([^/]+)/(\d{4}):(\d{2}):(\d{2}):(\d{2})|;

现在可以随意打印出来。

或者,可以在输入字符串的相关部分中使用:分隔符

my @hms = $line =~ m/:(\d+)/g;
print "@hms\n";

使用问题中的字符串打印13 26 23。这会通过/g修饰符重复捕获跟随冒号的所有连续数字。 所以@hms包含:小时,分钟,秒。

答案 2 :(得分:0)

这应该做的工作:

$line =~ /\d+\/\w+\/\d{4}:(\d+):(\d+):(\d+)/

$ 1包含小时数 2分钟和3秒钟

答案 3 :(得分:0)

执行此操作的最简单方法之一是扫描日期时间字符串以查找“单词”字符序列,其中包括所有数字和字母以及下划线字符。这将返回所有字段的值,你可以用它们做什么

use strict;
use warnings 'all';

my $dt = '12/Jul/2016:13:26:23';

my ($day, $mon, $year, $h, $m, $s) = $dt =~ /\w+/g;

printf "%dHour %dMin and %dSeconds.\n", $h, $m, $s;

输出

13Hour 26Min and 23Seconds.