アプリ版:「スタンプのみでお礼する」機能のリリースについて

f = ["1111111111111","2222222222222","3333333333333",]
f.each {|l|
p l.sub(/^.+$/, "aaaaaaa#{$&}bbbbbb")
p l
p ""
}
を Ruby1.8.7(2008-08-11patchlevel72)[i386-mswin32] で実行すると下記のように .sub(・・・) での置換開始行がずれました。なぜでしょうか?教えてくださいお願いします。
"aaaaaaabbbbbb"
"1111111111111"
""
"aaaaaaa1111111111111bbbbbb"
"2222222222222"
""
"aaaaaaa2222222222222bbbbbb"
"3333333333333"
""

A 回答 (3件)

未検証。

Rubyの経験殆どなし。

ですが,
http://www.ruby-doc.org/core/classes/String.html …
>.sub(・・・) での置換開始行がずれました。
メソッド自体が,そういう仕様なんじゃないの?

If the method call specifies replacement, special variables such as $& will not be useful,
もし、メソッド呼び出しがreplacementを指定知る時,$&のような特殊な変数は役に立たないだろう。

>as substitution into the string occurs before the pattern match starts.
なぜなら,文字列への置き換えは【パターンマッチが始まる前】に行われるからだ。

However, the sequences \1, \2, etc., may be used.
\1,\2...等の変数が用いられるだろう。

#Howeverは訳すと今ひとつしっくり来ないので訳さず
    • good
    • 0
この回答へのお礼

himajin100000さん、ありがとうございました。
示されたURLでよく分かりました。

残念ですが
s/・・・/・・・/
の代わりができないことがわかりました。

お礼日時:2009/03/26 20:15

http://www.ruby-lang.org/ja/man/html/String.html …
リファレンスマニュアルに書いてあったよ。

p l.sub(/^.+$/, "aaaaaaa\\&bbbbbb")
    • good
    • 0
この回答へのお礼

Gotthold さん、ありがとうございます。

himajin100000 さんの回答で、\1, \2 は確認できていました。
その他の\&, \', \` については たまたま私の確認ミスで、
誤って出来ないと認識していましたが、
ご指摘いただき、リファレンスマニュアルは、このことを説明しているのだと再認識しました。

s/・・・/・・・/ の代わりに使えるので、作業がはかどります。
助かりました。ありがとうございました。

お礼日時:2009/03/27 10:02

> .sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?


質問者さんがどう出力したいのかわからないので回答できません。どういう出力が欲しいのか具体的に補足したほうがいいと思います。

この回答への補足

実行結果に示しているように、ずれがあるのが判別できると思います。
そのずれが無いように、つまり
"aaaaaaa1111111111111bbbbbb"
"1111111111111"
""
"aaaaaaa222222222222bbbbbb"
"2222222222222"
""
"aaaaaaa3333333333333bbbbbb"
"3333333333333"
""
のように出力されるのがずれのない出力だと考えています。別の例で表現すると、
f = ["1111111111"]
だけなら正しい置換できていない出力となってしまいます。

補足日時:2009/03/26 18:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!