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

时间:2013-06-04 13:35:06

标签: string perl split extract

我有类似的东西:

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

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

使用Perl实现此目的的最佳方法是什么?

2 个答案:

答案 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