2016-07-28 85 views
2

所以我认为这是奇怪:意外行为GSUB

"x'y".gsub("'", "\\'") 
=> "xyy" 

的变体,

'x"y'.gsub('"', "\'") 
=> "x'y" 

作品就好了。

要么是一个错误(不太可能),要么是Ruby处理我不明白的反向引用。任何人都可以解释第一种情况会发生什么吗?

回答

1

\'表示$'这是赛后的一切。
(或)
\'中的一个gsub替换手段“匹配后部分字符串”。

再次逃离\和它的作品,

"x'y".gsub("'", "\\\\'") 

你也可以使用%q delimiters这里,

"x'y".gsub("'", %q(\\\')) 

//(IRB uses \\ to make an escape-\ visible) 

Gsub wierd behaviour

+0

提到你知道,如果这是在任何地方记录? [sub](http://ruby-doc.org/core-2.3.1/String.html#method-i-gsub)的文档甚至会说'[..],但实际上并不是模式捕获组,例如“\'”,那么它必须前面有两个反斜杠,比如“\\'”' – Confusion

+0

我也没有在任何地方得到正确的文档,但是因为我们需要逃避转义字符和单引号所以在这里使用4个反斜杠。 – Sravan