gpt4 book ai didi

perl - 在perl的if条件下匹配文件名

转载 作者:行者123 更新时间:2023-12-02 04:41:26 25 4
gpt4 key购买 nike

我有文件名如 lin.txt 和 lin1.txt 的文件以及其他 .txt 文件。我只需要找到这些文件并只打印一个文件的内容。我有以下代码,但它与以 lin* 开头的文件不匹配。什么问题?

$te_dir= "/projects/xxx/";
opendir (DIR, $te_dir) or die $!;
while (my $file = readdir(DIR))
{
if ($file=~/\.txt/)
{
#// Doing some tasks.

if($file ~= 'lin*.txt')
{
$linfile=$te_dir/$file;
open(LINFILE, $linfile) or die "Couldn't open file $file:$!";
while(my $line = <LINFILE>)
{
print $line;
}
close LINFILE;

}

}

}

最佳答案

您将 glob(shell 通配符)与正则表达式混合在一起。这是两种不同的形式主义,具有不同的语法和语义。在正则表达式(这是 Perl 匹配使用的)中,n* 匹配字符 n 的零次或多次出现。你可能是说

if ($file =~ /lin.*\.txt/)

另请注意运算符中的语法错误。您在第一个条件中正确地使用了 =~,但在进行此比较时将其拼错为 ~=。 (也许这只是一个转录错误;对我来说,这会造成明显的语法错误,因此脚本一开始就不会运行。)

如@brianadams 的回答所述,正确的正则表达式是

if ($file =~ /^lin.*\.txt$/)

带有行首 ^ 和行尾 $ anchor 以防止例如feline.txt.html 来自匹配。 Perl 正则表达式的默认行为是在输入字符串中的任何位置找到匹配项。

关于perl - 在perl的if条件下匹配文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com