【问题标题】:What does s-/-- and s-/\Z-- in perl mean?perl 中的 s-/-- 和 s-/\Z-- 是什么意思?
【发布时间】:2011-09-27 06:23:38
【问题描述】:

我是 perl 的初学者,我有一个关于模式匹配的问题。 我在 perl 中遇到了一行写它的地方

  $variable =~ s-/\Z--;

随着代码的继续,另一个变量被分配了

  $variable1 =~ s-/--;

你能告诉我这两行是做什么的吗? 我想知道s-/\Z--s-/--是什么意思。

【问题讨论】:

  • 以下几个答案显示了 s-/\Z-- 的 mo-bettah(可能)版本。标准分隔符是正斜杠。这是相同替换的版本,但使用标准斜杠分隔符:s/\/\Z//。这样做的好处是其他读者会更容易将其视为替代品。缺点是丑陋的斜杠和反斜杠使它看起来像一只喝醉的鸡在代码上散步。记住 perl 的座右铭:总是有不止一种方法可以做到这一点。在这种情况下,除了正斜杠作为分隔符之外,还有很多其他选项。

标签: regex perl


【解决方案1】:
$variable =~ s-/\Z--;

- 在这里用作分隔符。但是,最佳实践建议您使用 /{} 作为分隔符。

可以改写为:

$variable =~ s{/\Z}{};  # remove a / at the end of a string

考虑:

$variable1 =~ s-/--;

同样,它可以重写为:

$variable1 =~ s{/}{};  # remove the first /

【讨论】:

    【解决方案2】:

    Perl 中的s/// 运算符是一个替换 操作,它使用一种称为正则表达式的特殊模式对字符串执行搜索和替换.您可以在 Perl 附带的手册页中阅读有关正则表达式和 Perl 模式匹配的更多信息:

    如果您的系统上没有这些,请尝试在 Google 上搜索相同的内容。

    使用=~ 运算符对变量应用替换。因此,以下将变量$var 中的所有“foo”实例替换为“bar”。

    $var =~ s/foo/bar/;
    

    所有 Perl 运算符都记录在“perlop”手册页中。

    即使最常见的分隔符是斜杠(因此是 s///),您也可以使用任何其他标点符号作为分隔符。所以在这种情况下,作者决定使用破折号(-)作为分隔符。

    这是上面使用破折号作为分隔符的同一行代码:

    $var =~ s-foo-bar-;
    

    在您的情况下,破折号似乎没有为代码增加任何清晰度,因此最好将其更新为使用传统的斜杠。

    【讨论】:

    • “你也可以使用任何其他标点符号作为分隔符”——实际上你可以使用几乎任何字符作为分隔符:-)
    【解决方案3】:

    perl 中的s/// 搜索和替换功能可以与不同的分隔符一起使用,这就是在这种情况下所做的。他们已将 / 替换为减号 - 或破折号。

    s-/-- 从字符串中删除第一个 /s-/\Z-- 匹配并删除行尾的斜线。我认为写得更好:s{/$}{}.

    【讨论】:

      【解决方案4】:
      1. $variable1 =~ s-/--;可以写成

        $variable =~ s{/}{}xms;
        

        或者这个

        $variable =~ s/ \/ //xms;
        

        表示删除字符串中的第一个/

      2. 关于s-/\Z--,一般是这样写的

        $variable =~ s{/ \Z}{}xms;
        

        或者这个

        $variable =~ s/ \/ \Z //xms;
        

        这意味着如果/位于字符串的末尾(\Z),则删除它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        相关资源
        最近更新 更多