[英]Perl: Regular Expression Matching
假設我有一個固定變量:
$f_variable = "hello.exe";
並且我想逐行搜索文件並找到包含該單詞的路徑,例如:
/Desktop/Downloads/hello.exe
要么
/Desktop/Downloads/hello_qwdqd.exe
可以說文件擴展名可以是exe
或ex
我寫了這行代碼:
if ($line =~ m/(\/$f_variable.*\.[exe]+)
顯然,這是行不通的,因為上面的代碼行實際上是:
if ($line =~ m/(\/hello.exe.*\.[exe]+)
不會匹配任何東西。
所以我的問題是,在不更改$f_variable
值的情況下,應該進行哪些更改才能正確匹配並捕獲整個路徑?
您寫的甚至不是完整的正則表達式。 盡管您尚未清楚說明文件中的內容(行僅是路徑嗎?),但是您可能想要以下內容:
my $pattern = $f_variable;
$pattern =~ s/\.exe?$//;
if ($line =~ m{(/\S*\Q$pattern\E[^/]*\.exe?)}) {
print "$1\n";
}
這將刪除文件名.ex
或.exe
后綴以獲取基本名稱,然后匹配包含基本名稱的第一個字符串,包括任何以.ex
或.exe
結尾的非空格前導字符和結尾的非空格字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.