我是perl的新手,我觉得这个表达有点难以理解
$a =~ s/\'/\'\"\'\"\'/g
有人可以帮我理解这段代码的作用吗?
答案 0 :(得分:2)
目前尚不清楚哪一部分是个问题。这里简要提一下每一个。
表达式$str =~ s/pattern/replacement/
是一个正则表达式,用"模式"替换字符串$str
的一部分,由&#替换34;替换&#34 ;.最后使用/g
,对于"模式的所有实例都会这样做。在字符串中找到。还有更多内容 - 请参阅tutorial,quick start,reference以及perlre和perlop中的完整信息。
某些字符具有特殊含义,特别是在"模式"中使用时。常见的集合是.^$*+?()[{\|
,但这取决于正则表达式的 flavor 。此外,任何用作分隔符(通常为/
)的东西也必须进行转义。请参阅文档,例如this post。如果要在字符串中使用这些字符中的任何一个作为文字字符,则必须使用反斜杠转义。 (另请参阅约escaped sequences。)在您的示例中,'
已转义,用作替换的字符也是如此。
use strict;
use warnings;
my $str = "a'b'c";
$str =~ s/'/'"'/g;
print "$str\n";
打印所需的a'"'b'"'c
。请注意,您仍然可以 转义它们,它会起作用。 '
确实非常特殊的一种情况是在 one liner 中,它将整个代码分隔为通过shell提交给Perl,以便运行。 (但是,仅仅逃避它就行不通了。)总而言之,你所表达的表达方式与Jens的答案一样,但是有一个不需要的扭曲。
关于相关功能的说明:您几乎可以使用任何分隔符,而不仅仅是/
。所以这个|patt|repl|
很好,甚至可以这样:{patt}{repl}
(除非它们在里面使用)。这有时非常方便,可以提高可读性。首先,你不必在正则表达式内逃脱/
本身。
我希望这会有所帮助。
答案 1 :(得分:1)
其中的所有\
都是无用的(但无害),因此等同于s/'/'"'"'/g
。它会将每个'
替换为字符串中的'"'"'
。
这通常用于shell引用。请参阅示例https://stackoverflow.com/a/24869016/17389
答案 2 :(得分:0)
这段代码的和平用'"'"'
答案 3 :(得分:0)
可以通过删除不必要的反斜杠来简化 $ a = ~s /'/“'”'/ g
每个'我们都会用''''
代替