.sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?
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"
""
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー10pt
http://www.ruby-lang.org/ja/man/html/String.html …
リファレンスマニュアルに書いてあったよ。
p l.sub(/^.+$/, "aaaaaaa\\&bbbbbb")
この回答へのお礼
Gotthold さん、ありがとうございます。
himajin100000 さんの回答で、\1, \2 は確認できていました。
その他の\&, \', \` については たまたま私の確認ミスで、
誤って出来ないと認識していましたが、
ご指摘いただき、リファレンスマニュアルは、このことを説明しているのだと再認識しました。
s/・・・/・・・/ の代わりに使えるので、作業がはかどります。
助かりました。ありがとうございました。
> .sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?
質問者さんがどう出力したいのかわからないので回答できません。どういう出力が欲しいのか具体的に補足したほうがいいと思います。
この回答への補足
実行結果に示しているように、ずれがあるのが判別できると思います。
そのずれが無いように、つまり
"aaaaaaa1111111111111bbbbbb"
"1111111111111"
""
"aaaaaaa222222222222bbbbbb"
"2222222222222"
""
"aaaaaaa3333333333333bbbbbb"
"3333333333333"
""
のように出力されるのがずれのない出力だと考えています。別の例で表現すると、
f = ["1111111111"]
だけなら正しい置換できていない出力となってしまいます。
No.1ベストアンサー20pt
未検証。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は訳すと今ひとつしっくり来ないので訳さず
この回答へのお礼
himajin100000さん、ありがとうございました。
示されたURLでよく分かりました。
残念ですが
s/・・・/・・・/
の代わりができないことがわかりました。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











