-1

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

要比较的字符串:

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

这是我的 perl 代码。它目前不工作。有什么建议么?

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

2 回答 2

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
于 2013-07-06T17:13:11.960 回答
1
$bn_re =~ /[0-9a-z]+?\s[-0-9]+\s[\w\s]+?[<>a-z0-9]+?/i
于 2013-07-06T17:10:42.050 回答