我希望能够将以下所有字符串与下面的正则表达式匹配。它似乎没有工作。有什么建议吗?
要比较的字符串:
5878ce43aa3f1e1d713427d118115310 -1 Script Kiddie <perm>
f939f88b50fa5f0099b6751e7be27761 -1 Hacking <perm>
468f6634c5a9b00b5b3872dd6437143f 1356474103 Being Annoying <7day>
这是我的perl代码。它现在不工作。有什么建议吗?
my $bn_re = q{(.+?) (\d+) (.+?)};
答案 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