[英]At sign (@) in Perl Regular Expression
这个 Perl Regex(
从 C 代码中删除注释
)中@
和@@
的含义是什么:
$line =~ s@//.*@@;
和$line =~ s///.*//;
什么区别$line =~ s///.*//;
?
在文档中找不到对@
任何引用
这个 Perl 正则表达式中
@
和@@
的含义是什么
它没有任何意义。 s
(替代)运算符可以使用任何分隔符,但成对分隔符( {}
、 <>
、 []
、 ()
)的特殊情况。 同样可以写成s,//.*,,
, s#//.*##
或s{//.*}{}
。
如果/
没有被@
或其他分隔符替换,则必须在正则表达式和替换中对其进行转义,这会产生像s/\\/\\/.*//
这样丑陋s/\\/\\/.*//
。
这一切都记录在perlop(1)
联机帮助页中的“Quote and Quote-like Operators”下——包括对单引号 ( '
) 分隔符的特殊处理,它可以防止变量插值。
和
$line =~ s///.*//;
什么区别$line =~ s///.*//;
?
不同之处在于该示例已损坏且不起作用。
@
没有出现在正则表达式中。 它被用作替换运算符中的分隔符。
替换运算符通常写为s/PATTERN/REPLACEMENT/
。 PATTERN
是正则表达式, REPLACEMENT
被视为双引号字符串。 在运算符的标准版本中,斜线字符 ( /
) 用作分隔符,但 Perl 允许程序员选择几乎任何字符作为分隔符。 这样做通常是为了避免转义出现在模式或替换中的字符。
在您的示例代码中,程序员选择使用@
字符作为分隔符。 这是一个有点不寻常的选择:-)
由于模式包含/
字符,如果使用标准分隔符,则需要对它们进行转义:
$line =~ s/\/\/.*//;
这看起来很难看,使用不同的分隔符是一个不错的选择。 我会选择一个不那么令人困惑的角色,比如|
.
$line =~ s|//.*||;
这只是一个不同的符号,您不必在正则表达式本身中转义/
。 也可以是几乎任何其他特殊符号:
$line =~ s#//.*##g;
$line =~ s!//.*!!g;
$line =~ s&//.*&&g;
$line =~ s|//.*||g;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.