なぜこれが起こるのか理解できません:
irb(main):015:0> s = "Hello\\'World"
=> "Hello\\'World"
irb(main):016:0> "#X#".sub("X",s)
=> "#Hello#World#"
出力は「#Hello\'World#」になると思っていましたが、余分な # がどこから来たのかは確かにわかりません。
私は String#sub の内部と "\'" 記号に関係する何かに慣れていないと思います。
なぜこれが起こるのか理解できません:
irb(main):015:0> s = "Hello\\'World"
=> "Hello\\'World"
irb(main):016:0> "#X#".sub("X",s)
=> "#Hello#World#"
出力は「#Hello\'World#」になると思っていましたが、余分な # がどこから来たのかは確かにわかりません。
私は String#sub の内部と "\'" 記号に関係する何かに慣れていないと思います。
sub
これは、置換文字列にバックスラッシュが使用されているためです。
置換文字列には、 として知られて\'
いるグローバル変数に展開されるものが含まれています。文字列置換の場合、一致したテキストの後に存在する文字列内のすべてが含まれます。そのため、置き換えた yourの後に a が続くため、それが挿入されます。$'
POSTMATCH
X
#
比較:
"#X$".sub("X",s)
=> "#Hello$World$"
のドキュメントでは、を介したsub
後方参照の使用について言及していることに注意してください。これは、グローバル変数を直接参照しているようで、他のグローバル変数にも適用されます。\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.