我有类似的东西:
$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
我想从字符串中提取parlcont(第2和第3个下划线之间的单词)。
使用Perl实现此目的的最佳方法是什么?
答案 0 :(得分:3)
您可以将它与正则表达式匹配,通过组合贪婪和非贪婪的匹配,并使用捕获括号来提取您感兴趣的部分:
if( $string =~ m:.+/.*?_(.+?)_:) {
print "$1\n";
}
“。+ /”是一个贪婪的匹配,它会吞噬到最后一个/通过目录组件。
然后“。*?_”是非贪婪的,所以它会把所有东西都拿到第一个_
然后“(。+?)_”是另一个非贪婪的匹配并捕获一切直到下一个_
答案 1 :(得分:1)
如果您先使用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