2016-07-28 223 views
0

說我有一個固定變量:的Perl:正則表達式匹配

$f_variable = "hello.exe"; 

,我想通過文件裏逐行搜索和查找包含這個詞的路徑,例如:

/Desktop/Downloads/hello.exe 

/Desktop/Downloads/hello_qwdqd.exe 

讓說的文件擴展名可以是exeex

我寫這行代碼:

if ($line =~ m/(\/$f_variable.*\.[exe]+) 

顯然也不會發揮作用是因爲上面的代碼行居然是:

if ($line =~ m/(\/hello.exe.*\.[exe]+) 

哪些不會匹配一切。

所以我的問題是我應該做什麼改變,以適當地匹配和捕獲整個路徑沒有改變$f_variable的值?

+0

參見[文件::基名(https://metacpan.org/pod/File::Basename)。 –

回答

1

你寫的是不是一個完整的正則表達式。雖然你沒有說清楚有什麼文件(?是行只是路徑),你可能想是這樣的:

my $pattern = $f_variable; 
$pattern =~ s/\.exe?$//; 
if ($line =~ m{(/\S*\Q$pattern\E[^/]*\.exe?)}) { 
    print "$1\n"; 
} 

這將刪除的文件名.ex.exe後綴,以獲得基本名稱,然後匹配包含基本名稱包括任何非空間前導字符和尾隨.ex.exe結束非空格字符的第一個字符串。

+0

請問在'.exe?'旁邊的第二行中'$'的功能是什麼? –

+0

其條件結束 – ssr1012