String 使用Perl提取下划线之间字符串的最佳方法

String 使用Perl提取下划线之间字符串的最佳方法,string,perl,split,extract,String,Perl,Split,Extract,我有点像: $string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf'; 我想从字符串(第二和第三下划线之间的单词)中提取parlcont 使用Perl实现这一点的最佳方法是什么?如果您首先使用从文件路径中取出文件名,然后可以使用来取出所需的名称,那就更好了 use strict; use File::Basename; my $string = "/mfsi_rpt/files/mfsi/r

我有点像:

$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
我想从字符串(第二和第三下划线之间的单词)中提取parlcont


使用Perl实现这一点的最佳方法是什么?

如果您首先使用从文件路径中取出文件名,然后可以使用来取出所需的名称,那就更好了

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  

通过组合贪婪匹配和非贪婪匹配,并使用捕获括号提取感兴趣的部分,可以将其与正则表达式匹配:

if( $string =~ m:.+/.*?_(.+?)_:) {
  print "$1\n";
}
“+/”是一个贪婪的匹配项,它将吞噬所有内容直到最后一个/以通过目录组件

那么“*?”是非贪婪的,所以它会把所有东西都用到第一个_

那么“(.+?)ux”是另一种非贪婪的匹配和捕获下一个_