关于Perl中的正则表达式

时间:2015-08-08 05:02:50

标签: perl

我想以下面的格式写下grep日期和时间,并将其分配给删除空格和冒号的变量。请为此建议正则表达式。

07 Aug 2015 00:09:14

问题是我想在包含" CURRENT_RUN_ID"的特定行中grep这种格式。例如:该行将是这样的:

07 Aug 2015 00:09:14 -- INFO -- *** CURRENT_RUN_ID=600

我只需要从包含" CURRENT_RUN_ID"的特定行中获取日期和时间。

3 个答案:

答案 0 :(得分:4)

我不会使用正则表达式。相反,我会在--分隔符上拆分消息。这通过将解析整行与解析日期分开来简化问题。

# 07 Aug 2015 00:09:14 -- INFO -- *** CURRENT_RUN_ID=600
my($date_string, $flag, $message) = split /\s*--\s*/, $line, 3;

然后我使用Time::Piece->strptime将日期转换为Time :: Piece对象。这需要格式参数,如strftime

my $date = Time::Piece->strptime($date_string, '%d %b %Y %H:%M:%S');

然后你可以使用$date作为一个方便的Time :: Piece对象。

答案 1 :(得分:1)

#!/usr/bin/perl
use strict;
use warnings;

while (<>)
{
    if (m/^(\d\d) (\w{3}) (\d{4}) (\d\d):(\d\d):(\d\d) .*CURRENT_RUN_ID/)
    {
        my $var = "$1$2$3$4$5$6";
        print "$var\n";
    }
}

查找2位数字,3个字母,4位数字以及一系列以空白和冒号作为分隔符的数字对,然后是CURRENT_RUN_ID。如果匹配,则组装不带空格或冒号的字符串,并分配给变量。打印。

答案 2 :(得分:1)

这里的第一个正则表达式来获得匹配的行。第二个正则表达式删除空间&amp; &#39;:&#39;从约会时间开始。

div, flexBox_flex_minicalendar_
div, flexBox_flex_calendar_mainCal
div, flexDatePicker_Calendar_mainCal_begindate
div, flexDatePicker_Calendar_mainCal_enddate