私は次のようなものを持っています:
$string = '/mfsi_rpt/files/mfsi/reports/bval/bval_parlcont_pck_m_20130430.pdf';
文字列 (2 番目と 3 番目のアンダースコアの間の単語) から parlcont を抽出したいと思います。
Perlを使用してこれを達成する最良の方法は何ですか?
貪欲な一致と貪欲でない一致を組み合わせ、括弧を使用して関心のある部分を抽出することにより、これを正規表現と一致させることができます。
if( $string =~ m:.+/.*?_(.+?)_:) {
print "$1\n";
}
「.+/」は貪欲な一致であり、ディレクトリ コンポーネントを通過するために最後の / まですべてを飲み込みます。
次に、「.*?_」は貪欲ではないため、最初の _ まですべてがかかります
次に、「(.+?)_」は、次の _ までのすべてを一致させてキャプチャする別の非貪欲です
最初にFile::Basenameを使用してファイル パスからファイル名を取り出してから、分割を使用して目的の名前を取り出すことができるとよいでしょう。
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