关于perl从文件中查找特定字符串:

关于perl从文件中查找特定字符串:,第1张

while ($str = <DATA>) {

my @p = (0xFFFFFFFF, 0xFFFFFFFF)

my $i = 0

while ($str =~ /(\w+)/g) {

if ($1 eq 'decision')    {$p[0] = $i if (abs($p[0] - $p[1]) <= 6){print "matched\n" last}}

elsif ($1 eq 'McMillon') {$p[1] = $i if (abs($p[0] - $p[1]) <= 6){print "matched\n" last}}

$i++

}

}

__DATA__

Walmart chief executive Douglas McMillon defends company's decision to invest billions in improving its stores and Internet shopping presence。

指的是使用Perl语言来查找满足特定模式文件名。Perl模糊匹配可以使用正则表达式(Regular Expression)来实现,以及Perl的glob函数。

正则表达式是一种文本模式匹配的工具,它使用特殊的字符串模式来定义文本的结构,使用可以更快更有效地查找符合指定模式的文件名。

Perl的glob函数使用通配符(*和?)来指定文件名的模式,可以查找符合模式的文件名。这种模糊匹配文件名的方法不够精确,但它可以根据模式匹配文件名,并选择出符合条件的文件名。

此外,Perl还提供了更多的文件名匹配方法,比如File::Glob模块,它可以支持更多的模糊匹配字符,比如[ ],{ },()等,这使得Perl可以支持更多复杂的文件名模式。

总之,是一种非常强大的技术,它可以帮助开发者快速查找符合模式的文件名,并可以根据不同的模式进行精确的文件名匹配。

看这个需求,不需要正在表达式都可以,如果要使用正则表达式,程序逻辑要修改为:直接读出所有内容,然后连接为一个大传,正在匹配后,使用$`、$'等变量获取匹配的后面部分内容,再次进行匹配。

从内存和速度的角度来说,不使用正则也可以获取指定内容,使用状态变量的方式,设置一个标记变量(例如$stst),0表示没有遇到BFGS :,1表示遇到BFGS、但是没有遇到Lattice ,2表示遇到了Lattice ,3表示Lattice 之后1行,4表示Lattice 之后2行,5表示Lattice 之后第五行,就是需要的结果,代码逻辑如下:

my $stat=0

while($line=<File($a)>)

{

    if ($stat==0){

        $stat=1 if ($line eq 'BFGS:.....')

    }elsif ($stat==1){

        $stat=2 if ($line eq '  Lasttice ....')

    }elsif ($stat>=2 && $stat<=4){

        $stat++

    }elsif ($stat==5){

        last #找到结果,直接退出

    }

}

close(File($a))

print $line


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11865156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存