【发布时间】:2020-01-24 12:33:37
【问题描述】:
我是编程新手,但遇到了问题。我们必须使用 Perl 编写一个打开文件的脚本,然后使用正则表达式遍历每一行 - 然后打印出结果。我有文件的打开和循环,但我不知道如何实现正则表达式。当分配大纲建议数字为 338 时,它输出 0 个匹配结果。如果我不使用正则表达式,它会输出 2987,这是总行数 - 这是正确的。所以我无法弄清楚正则表达式有什么不正确的地方。任何帮助将不胜感激!
这是我目前所拥有的:
use warnings;
use strict;
my $i = 0;
my $filename = 'C:\Users\sample.log.txt';
open (fh, '<', $filename) or die $!;
while(<fh>) {
if ($filename=~ /(sshd)/){
$i++;
}
}
close(fh);
print $i;
【问题讨论】:
-
if ($filename=~ /(sshd)/)应该是if (/sshd/) -
哇,谢谢!所以你不必在 perl 中使用正则表达式命令?我曾经尝试找到答案的每个资源都在正则表达式之后使用“=~”,这并不总是必要的?
-
他不是这个意思。正则表达式匹配涉及两个运算符。
/foo/是m/foo/的缩写,m// 运算符进行正则表达式匹配(与s///进行替换或tr///完全不与正则表达式有关)。与之协同工作的第二个运算符是=~,它将操作绑定到它将操作的字符串。如果没有绑定字符串,它将在$_上运行,如果你不将它分配给其他东西(但你应该),这也是 while() 分配的内容。