Perl从含目录路径的文件名字符串中提取内容的替代实现方法
Perl提取指定字符串的实现方案
一、使用替换(Substitute)功能实现
完全可以用替换功能一行完成需求,代码示例如下:
use strict; use warnings; my $file = "/this/is/my/directory/ab%ABpeterfra"; # 匹配从开头到%及后面2个字符的所有内容,替换为空 (my $final = $file) =~ s/.*%..//; print "final:$final\n"; # 输出peterfra
正则逻辑说明:.*%会贪婪匹配所有字符直到最后一个%符号,后面两个.匹配%后面紧跟的2个字符(即示例中的AB),把这部分内容替换为空后,剩下的就是目标字符串。
二、其他更优的解决方式
- 方案1:正则捕获(逻辑更清晰,更推荐)
直接通过捕获组抓取目标内容,不需要修改原字符串,可读性更高:
use strict; use warnings; my $file = "/this/is/my/directory/ab%ABpeterfra"; my ($final) = $file =~ /%..(.*)$/; print "final:$final\n"; # 输出peterfra
正则逻辑说明:%..匹配%加后面2个字符,(.*)$捕获从该位置到字符串结尾的所有内容,直接赋值给$final即可。
- 方案2:先提取文件名再处理(兼容性最强)
如果路径中可能存在%符号,建议先用Perl核心模块File::Basename提取纯文件名后再处理,避免路径干扰结果:
use strict; use warnings; use File::Basename; my $file = "/this/is/my/%directory/ab%ABpeterfra"; my $filename = basename($file); my ($final) = $filename =~ /%..(.*)$/; print "final:$final\n"; # 输出peterfra
该写法不管路径中是否包含%,都可以正确提取到文件名中的目标字符串,适用场景更广。
内容的提问来源于stack exchange,提问作者vkk05
相关产品推荐
相关产品推荐

