【问题标题】:Perl String - Substitute Multiple CharactersPerl 字符串 - 替换多个字符
【发布时间】:2022-01-08 05:18:07
【问题描述】:

我不知道如何仅使用 $mypath=~s 从 /usr/lib 更改为 /synopsys/vcs/lib/ /.....; 有什么办法吗?

$mypath = "/usr/lib";
$mypath =~ s/usr/synopsys/lib//g;

print "$mypath\n";```

【问题讨论】:

  • 我的讲师给了我这个问题,我必须填写 $mypath =~ s/____________; 的空白,但我不知道如何。

标签: perl


【解决方案1】:

/ 是一个特殊字符,因为它被用作分隔符。如果因此需要转义。

$mypath =~ s/\/usr\/lib/\/synopsys\/vcs\/lib\//;

但是,使用替代分隔符意味着我们不需要所有这些转义。

$mypath =~ s{/usr/lib}{/synopsys/vcs/lib/};

这将替换字符串中包含的/usr/lib 的第一个实例。如果您想在整个字符串中替换/usr/lib,我会使用

$mypath = "/synopsys/vcs/lib/" if $mypath eq "/usr/lib";

【讨论】:

    【解决方案2】:

    正则表达式替换类似于s/match this / replace with this / 在 perl 中,您需要使用反斜杠 \ 转义正斜杠 / 然后使用括号将usr\/ 捕获到$1 所以对于你的例子:

    $mypath =~ s/(usr\/)/$1synopsys\//; 
    

    【讨论】:

    • 您可以使用不同的字符作为分隔符,这样您就不必像 s#(usr/)#$1synopsys/# 一样转义 /
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2015-03-15
    • 2014-10-06
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多