2013-06-04 91 views
-1

提取下劃線之間的字符串我有類似:最佳方式使用Perl

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

我想從字符串(第2和第3下劃線的字)提取parlcont。

什麼是使用Perl實現這一目標的最佳方式?

回答

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 
+0

謝謝 - 這真是太好了。 –

3

您可以用正則表達式匹配這一點,通過結合貪婪和非貪婪的匹配,並使用捕獲括號中提取你感興趣的部分:

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

「。+ /」是一個貪婪的匹配,它會吞噬所有的東西直到最後/超過目錄組件。

那麼「 *?_」是不貪婪,所以將採取一切行動,以第一_

然後‘(。+?)_’是另一種非貪婪匹配和捕捉一切直到下一個_