Perl Regex禁止日志

时间:2013-07-06 17:02:35

标签: regex perl

我希望能够将以下所有字符串与下面的正则表达式匹配。它似乎没有工作。有什么建议吗?

要比较的字符串:

5878ce43aa3f1e1d713427d118115310 -1 Script Kiddie <perm>
f939f88b50fa5f0099b6751e7be27761 -1 Hacking <perm>
468f6634c5a9b00b5b3872dd6437143f 1356474103 Being Annoying <7day>

这是我的perl代码。它现在不工作。有什么建议吗?

my $bn_re = q{(.+?) (\d+) (.+?)};

2 个答案:

答案 0 :(得分:6)

如果前两个字段总是没有空格,则可以使用split效果很好,使用LIMIT选项只能得到三个字段:

my ($str, $num, $other) = split ' ', $_, 3;

也就是说,假设你读了这样的文件:

while (<>) {
    ... # your code here
}

另外,这个:

my $bn_re = q{(.+?) (\d+) (.+?)};

不是正则表达式。您可能会将q()qr()混淆。您可能也会混淆

的功能
$str =~ $bn_re;

将自动将正则表达式包含在匹配运算符m//中。但是你应该使用qr()q()运算符执行单引号的操作。

此外,您应该知道.+?如果您允许,它将匹配单个字符。正如你在“正则表达式”结束时所做的那样。在字符串的末尾,要么

... (.+)/    # matching greedily 
... (.+?)$/  # using anchor to end of string

答案 1 :(得分:1)

$bn_re =~ /[0-9a-z]+?\s[-0-9]+\s[\w\s]+?[<>a-z0-9]+?/i