没有分隔符的不寻常的替代品

时间:2017-01-11 10:44:45

标签: regex perl

我无法破译这个正则表达式:

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

我无法访问输入或输出。

有没有人知道它的作用?

2 个答案:

答案 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作为方便的

的正则表达式分隔符

为避免转义,我们可以使用其他分隔符。