Regex 不带分隔符的异常替换
我无法解读这个正则表达式的含义:Regex 不带分隔符的异常替换,regex,perl,Regex,Perl,我无法解读这个正则表达式的含义: $c =~ s^.*/^^g; 我没有访问输入或输出的权限 有人知道它的作用吗 此处^用作分隔符 s^.*/^^g; s/.*\///g; 我们可以使用任何可打印字符作为正则表达式分隔符 s^.*/^^g; s/.*\///g; 两个正则表达式都是相同的 非标准分隔符主要用于避免在正则表达式模式中转义分隔符字符。为了 $c = "this is a string with / slash"; 现在你的正则表达式应该是 $c =~ s/.*\///
$c =~ s^.*/^^g;
我没有访问输入或输出的权限
有人知道它的作用吗 此处
^
用作分隔符
s^.*/^^g;
s/.*\///g;
我们可以使用任何可打印字符作为正则表达式分隔符
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.
为了方便起见,我们还将使用字符作为正则表达式分隔符
为了避免转义,我们可以使用其他分隔符。s//的默认分隔符是斜杠,但您可以使用任何可打印字符作为替代 所以 相当于
$c =~ s/.*\///g
请注意,使用常规分隔符需要转义模式本身中的斜杠
有些选项比其他选项更好,如果您只是试图避免在模式中转义斜杠,我认为管道字符|
更好
我不希望从这个程序员那里学到太多东西。正如您所经历的,^
是一个糟糕且令人困惑的选择。另外,/g
修饰符是多余的,$c
对于标识符来说是一个糟糕的选择
我会写
$c =~ s|.*/||
非常感谢。你知道这是在哪里记录的吗?@JohnDoe也在和之前的分章中。可以使用任意单个字符作为类似引号的运算符的分隔符。如果它是一种成对的支架,那么它们就起作用了
s{foo}{bar}
,s
等等。但是s~foo~bar~
或s]foo]bar]
也起作用。你甚至可以使用字母<代码>$foo=~s sfoosbars,但是在s
之后需要一个空格。每天,我都会有另一个Perl惊喜!谢谢!:)@mkHun:我认为你可以给出一个比你链接到的答案更好的例子。冒号:
与扬抑符^
一样糟糕,看起来像线噪波,如果您尝试在解决方案中打高尔夫球并且在后面不加空格,情况会变得更糟
和周围的=~
。这可能是我个人的喜好,但我觉得这根管子不太合适。它看起来太像一个or操作符了。如果对这些类似引号的运算符有疑问,我总是使用一对括号作为分隔符。通常是卷曲的。毕竟他们把两块东西围起来了。当然这是个人喜好,但你应该为其他读者写作s |.*/|
明显比s{.*/}{}
干净得多,而且它的优点是/
和
都是简单的行。是的,`s\./\\`也可以,但那是另一个问题!