我无法破译这个正则表达式:
$c =~ s^.*/^^g;
我无法访问输入或输出。
有没有人知道它的作用?
答案 0 :(得分:6)
s///
的默认分隔符是斜杠,但您可以使用任何可打印字符作为替代。
所以
$c =~ s^.*/^^g
相当于
$c =~ s/.*\///g
请注意,使用传统的分隔符需要对模式本身中的斜杠进行转义
有些选项比其他选项更好,如果您只是试图避免在模式中转义斜杠,我认为管道符|
更好
我不希望从这个程序员那里学到太多东西。正如您所经历的那样,^
是一个糟糕且令人困惑的选择。此外,/g
修饰符是多余的,$c
是标识符的可怕选择
我会写
$c =~ s|.*/||
答案 1 :(得分:2)
此处^
用作分隔符。
我们可以使用任何可打印字符作为正则表达式分隔符。
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.
我们将使用character作为方便的
的正则表达式分隔符为避免转义,我们可以使用其他分隔符。