2016-09-25 5 views
0

特定のパターンの後で特定のパターンの前にあるファイル内の単語を探したい。パターンの後で、perlを使って別のパターンの前にある単語を見つける

print("Hi", "My name is", "Tej"); 

だから、私は一人でTej単語を取得し、配列にそれを保存したい: は、ここにファイルの内容です。同様に、私は上記と同様のパターンを持つが、名前は異なる多くのファイルを持っているので、それらの名前をすべて配列に入れる必要があります。つまり、パターンprint("Hi", "My name is", "の後、パターン");の前にあるファイルからの単語が必要です。

カンマの後にスペースがないことがあります。

私はファイルを開き、そのパターンの前後にある単語を検索する関数にファイルハンドルを渡すためのスクリプトを書いた。次のように関数のコードは次のとおりです。

sub search{          
my $file_handle = shift; 
while (<$file_handle>) 
{ 
/.print("Hi", "My name is", "[\s]+([A-Za-z_0-9]+)/ ; 
push @array, $1; 
} 
} 

私は正規表現が動作しません知っているが、私は私が必要な単語を見つける方法について確認していません。提供されたヘルプは高く評価されます。 おかげ

答えて

-1

は、ここで私はそれを行うだろう方法は次のとおりです。

sub search {          
    my $file_handle = shift; 
    while (<$file_handle>) { 
     if (/print\("Hi", ?"My name is", ?"([^"]+)"\);/) { 
      push @array, $1; 
     } 
    } 
} 

は、私は正規表現(この場合はすなわち())内部の特殊文字をエスケープし、私は内部のすべての非引用符を一致させるために"([^"]+)"を使用しました引用符。

スペースの後の疑問符は、スペースの有無を任意にします。

+0

お返事ありがとうございます。論理が役立ちます。 –

+0

ヒント: 'if(/ print \("こんにちは "、"私の名前は? "([^"] +) "\); /){ push @array、$ 1; }'を書くことができます@(@); @); @); @); @); @); @@@@@@@@@@@@@@@@@@@@@@@@ ( "^")+) "\); /;' \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ' – ikegami

関連する問題