Ruby:字符串“sub”在存在“sub”时的无法解释的行为\\'&引用;
我不明白为什么会发生这种情况:Ruby:字符串“sub”在存在“sub”时的无法解释的行为\\'&引用;,ruby,Ruby,我不明白为什么会发生这种情况: irb(main):015:0> s = "Hello\\'World" => "Hello\\'World" irb(main):016:0> "#X#".sub("X",s) => "#Hello#World#" 我本以为输出会是“Hello'World”,但我确实不明白额外的是从哪里来的 我想我不熟悉字符串sub的内部结构和“\”符号。这是因为在替换字符串中使用了反斜杠 替换字符串包含\',该字符串扩展为全局变量$”,即POSTMA
irb(main):015:0> s = "Hello\\'World"
=> "Hello\\'World"
irb(main):016:0> "#X#".sub("X",s)
=> "#Hello#World#"
我本以为输出会是“Hello'World”,但我确实不明白额外的是从哪里来的
我想我不熟悉字符串sub的内部结构和“\”符号。这是因为在替换字符串中使用了反斜杠 替换字符串包含
\'
,该字符串扩展为全局变量$”
,即POSTMATCH
。对于字符串替换,它包含匹配文本后字符串中存在的所有内容。因此,因为替换的X
后面跟着一个#
,这就是插入的内容
比较:
"#X$".sub("X",s)
=> "#Hello$World$"
请注意,的文档涉及到反向引用的使用\0
到\9
。这似乎直接指全局变量$0
到$9
,也适用于其他全局变量
供参考,正则表达式匹配设置为:
$~ is equivalent to ::last_match;
$& contains the complete matched text;
$` contains string before match;
$' contains string after match;
$1, $2 and so on contain text matching first, second, etc capture group;
$+ contains last capture group.
我不明白发生了什么事。。你能告诉我
$”的故事吗?为什么块形式没有发生同样的情况?@ArupRakshit-查看我答案中的链接,但基本上,当您匹配正则表达式时,Ruby会设置一些全局变量。其中一个是$”
@Gareth Ok..但是我们这里没有使用任何正则表达式,只有一个字符串。。那怎么办?为什么不使用块形式?“如果替换为字符串,它将替换匹配的文本。它可能包含对格式为“\d”的模式捕获组的反向引用,其中d是组号或“\k”,其中n是组名。如果是双引号字符串,则两个反向引用前面必须加上一个反斜杠。但是,在替换中,特殊匹配变量(如&$)将不会引用当前匹配。”