我是perl的初学者,我对模式匹配有疑问。 我在perl中遇到了一行写的
$variable =~ s-/\Z--;
随着代码的推进,另外一个变量被分配了
$variable1 =~ s-/--;
请告诉我这两行是做什么的?
我想知道s-/\Z--
和s-/--
的含义。
答案 0 :(得分:5)
$variable =~ s-/\Z--;
-
在此处用作分隔符。不过,最佳做法建议您使用/
或{}
作为分隔符。
可以重写为:
$variable =~ s{/\Z}{}; # remove a / at the end of a string
考虑:
$variable1 =~ s-/--;
同样,它可以重写为:
$variable1 =~ s{/}{}; # remove the first /
答案 1 :(得分:5)
Perl中的s///
运算符是替换操作,它使用一种称为正则表达式的特殊模式对字符串执行搜索和替换。您可以在Perl附带的手册页中阅读有关正则表达式和Perl模式匹配的更多信息:
如果您的系统上没有这些内容,请尝试在Google上搜索相同内容。
使用=~
运算符对变量应用替换。因此,以下内容将变量$var
中的'foo'的所有实例替换为'bar'。
$var =~ s/foo/bar/;
所有Perl操作符都记录在'perlop'手册页上。
即使最常见的分隔符是斜杠(因此为s ///),您也可以使用任何其他标点符号作为分隔符。因此,在这种情况下,作者决定使用破折号(-
)作为分隔符。
以上是使用短划线作为分隔符的相同代码行:
$var =~ s-foo-bar-;
在您的情况下,破折号似乎没有为代码添加任何清晰度,因此最好更新它以使用传统的斜杠代替。
答案 2 :(得分:1)
perl中的s///
搜索和替换函数可以与不同的分隔符一起使用,这是在这种情况下完成的。他们已将/
替换为减号-
或破折号。
s-/--
从字符串中删除第一个/
。
s-/\Z--
匹配并删除行尾的斜杠。我认为这写得更好:s{/$}{}
。
答案 3 :(得分:-1)
$variable1 =~ s-/--;
可以写成
$variable =~ s{/}{}xms;
或者
$variable =~ s/ \/ //xms;
这意味着删除字符串中的第一个/
。
关于s-/\Z--
,它通常是这样写的
$variable =~ s{/ \Z}{}xms;
或者
$variable =~ s/ \/ \Z //xms;
如果它位于字符串末尾(/
),则表示删除\Z
。