-1

我有类似的东西:

$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';

我想从字符串(第二个和第三个下划线之间的单词)中提取 parlcont。

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

4

2 回答 2

3

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

if( $string =~ m:.+/.*?_(.+?)_:) {
  print "$1\n";
}

“.+/”是一个贪婪的匹配,它将吞噬所有内容,直到最后一个 / 以通过目录组件。

那么 ".*?_" 是非贪婪的,所以它将把所有东西都带到第一个 _

然后 "(.+?)_" 是另一个非贪婪匹配和捕获所有内容直到下一个_

于 2013-06-04T14:41:34.717 回答
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  
于 2013-06-04T13:43:57.420 回答