Regex 在perl中,s-/--和s-/\Z--是什么意思?

Regex 在perl中,s-/--和s-/\Z--是什么意思?,regex,perl,Regex,Perl,我是perl的初学者,对模式匹配有疑问。 我在perl中遇到了一行代码 $variable =~ s-/\Z--; 随着代码的进行,另一个变量被赋值 $variable1 =~ s-/--; 你能告诉我这两条线是干什么用的吗? 我想知道s-/\Z--和s-/--是什么意思 $variable =~ s-/\Z--; -在此处用作分隔符。但是,最佳实践建议您使用/或{}作为分隔符 它可以改写为: $variable =~ s{/\Z}{}; # remove a / at the

我是perl的初学者,对模式匹配有疑问。 我在perl中遇到了一行代码

  $variable =~ s-/\Z--;
随着代码的进行,另一个变量被赋值

  $variable1 =~ s-/--;
你能告诉我这两条线是干什么用的吗? 我想知道
s-/\Z--
s-/--
是什么意思

$variable =~ s-/\Z--;
-
在此处用作分隔符。但是,最佳实践建议您使用
/
{}
作为分隔符

它可以改写为:

$variable =~ s{/\Z}{};  # remove a / at the end of a string
$variable1 =~ s{/}{};  # remove the first /
考虑:

$variable1 =~ s-/--;
同样,可以将其改写为:

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

perl中的
s//
搜索和替换函数可以与不同的delimeter一起使用,在本例中就是这样做的。他们将
/
替换为减号
-
,或破折号

s-/--
从字符串中删除第一个
/

s-/\Z--
匹配并删除行尾的斜杠。我认为这样写得更好:
s{/$}{}
Perl中的
s//
操作符是一种替换操作,它使用一种称为正则表达式的特殊模式对字符串执行搜索和替换。您可以在Perl附带的手册页中阅读有关正则表达式和Perl模式匹配的更多信息:

如果你的系统上没有这些,试着在谷歌上搜索相同的

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

$var =~ s/foo/bar/;
所有Perl操作符都记录在“perlop”手册页上


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

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

$var =~ s-foo-bar-;
在您的例子中,破折号似乎没有为代码增加任何清晰度,因此最好将其更新为使用传统的斜杠

  • $variable1=~s-/--可以写成

    $variable =~ s{/}{}xms;
    
    还是这个

    $variable =~ s/ \/ //xms;
    
    $variable =~ s/ \/ \Z //xms;
    
    这意味着删除字符串中的第一个
    /

  • 关于
    s-/\Z--
    ,通常是这样写的

    $variable =~ s{/ \Z}{}xms;
    
    还是这个

    $variable =~ s/ \/ //xms;
    
    $variable =~ s/ \/ \Z //xms;
    
    如果一个
    /
    位于字符串末尾(
    \Z
    ),则表示删除该字符串


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