提取下劃線之間的字符串我有類似:最佳方式使用Perl
$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
我想從字符串(第2和第3下劃線的字)提取parlcont。
什麼是使用Perl實現這一目標的最佳方式?
提取下劃線之間的字符串我有類似:最佳方式使用Perl
$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
我想從字符串(第2和第3下劃線的字)提取parlcont。
什麼是使用Perl實現這一目標的最佳方式?
如果您首先使用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
您可以用正則表達式匹配這一點,通過結合貪婪和非貪婪的匹配,並使用捕獲括號中提取你感興趣的部分:
if($string =~ m:.+/.*?_(.+?)_:) {
print "$1\n";
}
「。+ /」是一個貪婪的匹配,它會吞噬所有的東西直到最後/超過目錄組件。
那麼「 *?_」是不貪婪,所以將採取一切行動,以第一_
然後‘(。+?)_’是另一種非貪婪匹配和捕捉一切直到下一個_
謝謝 - 這真是太好了。 –