perl 没有分隔符的异常替换

gxwragnw  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(142)

我无法解释这个正则表达式的作用:

$c =~ s^.*/^^g;

我无法访问输入或输出。
有人知道它是干什么的吗?

s5a0g9ez

s5a0g9ez1#

s///的默认分隔符是斜杠,但您可以使用任何可打印字符作为替代。
所以

$c =~ s^.*/^^g

相当于

$c =~ s/.*\///g

请注意,使用常规分隔符需要转义模式本身中的斜杠
有些选项比其他选项更好,如果您只是想避免在模式中转义斜杠,我认为管道字符|更好
我不希望从这个程序员那里学到太多东西。正如您所经历的,^是一个糟糕的、令人困惑的选择。而且,/g修饰符是多余的,$c对于标识符来说是一个糟糕的选择
我会写

$c =~ s|.*/||
cwxwcias

cwxwcias2#

此处^用作分隔符。
我们可以使用任何可打印字符作为正则表达式分隔符。

s^.*/^^g;

s/.*\///g;

两个正则表达式相同
非标准分隔符通常用于避免对正则表达式模式中的分隔符字符进行转义。

$c = "this is a string with / slash";

现在您的正则表达式应该是

$c =~ s/.*\///
          ^^

你在这里逃脱了斜杠。
两个正则表达式是相同的。我们将使用我们想要的任何正则表达式。@simbabque在评论中提到。

s{foo}{bar}gs # here curly braces are delimiter
 s[some][same] # here square bracket are delimeter.

我们将使用字符作为正则表达式分隔符,以方便
为了避免转义,我们可以使用其他分隔符。

相关问题