Regex 如何在If语句中使用正则表达式?Perl

Regex 如何在If语句中使用正则表达式?Perl,regex,perl,Regex,Perl,我是编程新手,遇到了一个问题。我们必须使用Perl编写一个打开文件的脚本,然后使用正则表达式在每一行循环,然后打印结果。打开文件和循环,但我不知道如何实现正则表达式。当分配大纲建议数字为338时,它输出0个匹配结果。如果我不使用正则表达式,它将输出2987行,这是行的总数-这是正确的。所以正则表达式有点不正确,我就是搞不懂。任何帮助都将不胜感激 到目前为止,我所掌握的情况如下: use warnings; use strict; my $i = 0; my $filename = 'C:\Us

我是编程新手,遇到了一个问题。我们必须使用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; 
使用警告;
严格使用;
我的$i=0;
my$filename='C:\Users\sample.log.txt';

打开(fh,想想你的这段代码:

while(<fh>) {
    if ($filename=~ /(sshd)/){
        $i++;
    }
}

操作代码有一些错误,我已经纠正了

use warnings;
use strict;
use feature 'say';

my $i = 0;
my $filename = 'C:\Users\sample.log.txt';

open my $fh, '<', $filename
        or die "Couldn't open $filename";

map{ $i++ if /sshd/ } <$fh>;

close($fh);

say "Found: $i";
使用警告;
严格使用;
使用特征“说”;
我的$i=0;
my$filename='C:\Users\sample.log.txt';

打开我的$fh,“
if($filename=~/(sshd)/)
应该是
if(/sshd/)
哇,谢谢!这样你就不必在perl中使用regex命令了?我用来尝试并找到答案的每个资源都使用了”=~“遵循正则表达式并不总是必要的?他不是这个意思。正则表达式匹配涉及两个运算符。
/foo/
是执行正则表达式匹配的运算符
m/foo/
的缩写(与执行替换的
s//
或根本不必使用正则表达式的
tr//
相反)。与之协同工作的第二个运算符是
=~
,它将操作绑定到它将要操作的字符串。如果没有绑定到它的字符串,它将在
$\uuu
上操作,这也是while()分配给的,如果您不将其分配给其他对象(但您应该)。还有
perl-lne'$i++If/sshd}{print$i'C:\Users\sample.log.txt
或使用
END{}
而不是爱斯基摩人之吻。这相当于
grep-cshd C:\Users\sample.log.txt
…但我认为这段perl代码会增长。@stevesliva:确实如此!但OP似乎并没有在这里寻找一行,所以我提供了一个作为perl脚本的答案。
while (<fh>) {
    $i++ if /sshd/;
}
use warnings;
use strict;
use feature 'say';

my $i = 0;
my $filename = 'C:\Users\sample.log.txt';

open my $fh, '<', $filename
        or die "Couldn't open $filename";

map{ $i++ if /sshd/ } <$fh>;

close($fh);

say "Found: $i";