私はRubyの正規表現で遊んでいました。正規表現のトリックを見つけるはずだったのですが、理解できません。なぜですか?
p a = "This is a test!".gsub!(//,'X')
上記の出力は
"XTXhXiXsX XiXsX XaX XtXeXsXtX!X"
テスト文字列の任意の文字の前後に「X」を配置します。誰もが理由を知っていますか?
//
幅がゼロのサブ文字列、つまり空の文字列に一致します。隣接する文字の間に任意の数の空の文字列がありますが、gsub
ファミリは同じ場所で一致し続けません。一致するもの(つまり、この場合は空の文字列)が見つかった場合、同じ位置で再び一致することはないため、次の隣接する文字の間にある空の文字列に進みます。
ゼロ幅の文字列(//
)と一致するように要求し、それを「X」に置き換えたので、それが行われました。gsub
文字列をスキャンし、すべての一致(すべての文字境界)を置換に置き換えます。
空のスペースに一致するように要求したので、文字間のすべてのヌルスペースに一致します。
文字と一致しないため、すべての文字が残りました。