gpt4 book ai didi

regex - 如何在 While If 语句中使用正则表达式?珀尔

转载 作者:行者123 更新时间:2023-12-04 10:42:00 26 4
gpt4 key购买 nike

我是编程新手,遇到了一个问题。我们必须使用 Perl 编写一个脚本来打开一个文件,然后使用 Regex 循环遍历每一行 - 然后打印出结果。文件的打开和我拥有的循环,但我不知道如何实现正则表达式。当分配大纲建议数字为 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;

最佳答案

考虑一下你的这段代码:

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

您确实在遍历文件行,但您一直在检查文件名是否与您的正则表达式匹配。这显然不是你想要的。

你的意思是:
while (my $line = <fh>) {
if ($line =~ /sshd/){
$i++;
}
}

正则表达式周围的括号似乎是多余的(它们是要捕获的肉,而您只是匹配)。

自表达式 while (<fh>)将行的内容分配给特殊变量 $_ (这是正则表达式匹配的默认参数),这可以缩短为:
while (<fh>) {
$i++ if /sshd/;
}

关于regex - 如何在 While If 语句中使用正则表达式?珀尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com