【问题标题】:Extracting and replacing filename extensions in Perl在 Perl 中提取和替换文件扩展名
【发布时间】:2012-08-02 01:13:31
【问题描述】:

在开始之前,我想让您知道我不是 Perl 专家。由于分配给我的一些特定任务,我才刚刚开始。

此任务的要求是提取文件的扩展名(.dat)并替换为.trg。问题是我们正在压缩.dat 文件以生成$filename.dat.gz,当我们提取扩展名并替换它时,我们得到$filename.dat.trg,而理想情况下我们想要的是$filename.trg

至于代码(请注意,这似乎是一个非常古老的“遗留”代码,我不想过多地修改它,因为它曾经/正在由另一个人维​​护),这就是它的方式被放下了

#prepare the trigger file
#get the extension  
my @contains_extension = split (/\./ , $filename);
my $ext = $contains_extension[-1];

#replace with  a ".trg" extension
my $remote_trgfile = $filename;
$remote_trgfile =~ s/$ext$/trg/;
my $trgfile = $out;
$trgfile =~ s/$ext$/trg/;

记住上面代码中的$filename后缀为.dat.gz,即文件名为$filename.dat.gz

如果有人能帮助我用一种更简单的方法来提取扩展名(.dat.gz)并将其替换为 .trg,我将不胜感激

【问题讨论】:

  • 我相信这段代码是 Perl,而不是 PHP。
  • 我的错,适当改了..
  • 您的问题不清楚。你需要什么与s/\.dat\.gz$/.trg/ 不同的地方?

标签: perl


【解决方案1】:

所以您想更改文件名的“扩展名”,包括可选的.gz?试试:

$filename =~ s{\.[^.]*(?:\.gz)?$}{.trg}

【讨论】:

    【解决方案2】:

    试试

    $filename =~ s/\..*$/.trg/;
    

    无需进行所有花哨的拆分工作来尝试捕获扩展:)

    细分:

    。火柴 。 .* 匹配所有内容(换行符除外) $ 匹配字符串的结尾

    那么你只是用 .trg 替换它

    所以你基本上只是在第一个“。”之后接受所有内容。并替换为 .trg

    希望有帮助:)

    【讨论】:

    • 如果文件名包含.(在 *nix 环境中完全有效)怎么办?
    • 那么 s/\..*?$/.trg/ 否则没办法告诉
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多