【问题标题】:Perl remove matching pattern and store the rest to variablePerl 删除匹配模式并将其余的存储到变量中
【发布时间】:2013-02-15 06:02:16
【问题描述】:

我想删除从行尾开始的匹配模式并将该行的其余部分存储到一个变量中如何在 perl 中?

例如:

$ROOT = "/home/usr/bin";

我想从上面的 $ROOT 变量中删除“/bin”并打印/存储其余部分。下面的代码会起作用吗?

$ROOT =s/^(.*?)(?=\/bin)/$1/g
print $ROOT;

上面的代码会打印在输出下面吗,

/home/usr

请注意,由于我是新手,所以上述建议可能有误。请帮帮我。

【问题讨论】:

  • 是目录还是字符串?
  • 与其问“它会做这个/那个吗?”,为什么不自己试试呢?你确实可以使用 perl 解释器,不是吗?
  • 这是一种复杂的 $ROOT =~ s/\/bin$//

标签: perl


【解决方案1】:

或者你可以使用File::Basename:

use strict;
use warnings;
use File::Basename;

my $ROOT = "/home/usr/bin";
print dirname($ROOT);

输出:

/home/usr

【讨论】:

  • +1 这是处理文件名和路径名时的正确做法。
【解决方案2】:

试试这个:

my $ROOT = "/home/usr/bin";
$ROOT =~ s!/bin$!!; # the delimiter is "!" to avoid escaping "/"
print $ROOT;

就像foampile 所说,您可以使用perl 解释器测试您的正则表达式。我推荐你交互式perl shell perlconsolere.pl

perlconsole

【讨论】:

    【解决方案3】:

    你已经通过使用前瞻来打破它。如果你只是写了

    $ROOT =~ s/^(.*)\/bin/$1/
    

    然后它会工作。要删除任何路径的最后一段,请编写

    $ROOT =~ s|/[^/]*$||
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2017-12-24
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多