我有类似的东西:
$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
我想从字符串(第二个和第三个下划线之间的单词)中提取 parlcont。
使用 Perl 实现这一目标的最佳方法是什么?
您可以将其与正则表达式匹配,通过结合贪婪和非贪婪匹配,并使用捕获括号来提取您感兴趣的部分:
if( $string =~ m:.+/.*?_(.+?)_:) {
print "$1\n";
}
“.+/”是一个贪婪的匹配,它将吞噬所有内容,直到最后一个 / 以通过目录组件。
那么 ".*?_" 是非贪婪的,所以它将把所有东西都带到第一个 _
然后 "(.+?)_" 是另一个非贪婪匹配和捕获所有内容直到下一个_
如果您首先使用File::Basename从文件路径中取出文件名,那么您可以使用split取出所需的名称。
use strict;
use File::Basename;
my $string = "/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf";
my $data = ( split( /_/, basename($string) ))[1];
输出:
parlcont