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=0while($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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)