假设我有一个修复变量:
$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
的值?
答案 0 :(得分:1)
你写的东西甚至不是一个完整的正则表达式。虽然你还没有清楚地说明文件中的内容(线条只是路径吗?),你可能想要这样的东西:
my $pattern = $f_variable;
$pattern =~ s/\.exe?$//;
if ($line =~ m{(/\S*\Q$pattern\E[^/]*\.exe?)}) {
print "$1\n";
}
这将删除文件名.ex
或.exe
后缀以获取基本名称,然后匹配包含基本名称的第一个字符串,包括任何非空格前导字符和尾随非空格字符结尾在.ex
或.exe
。