新しく質問する

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

役に立った:5件
  • 質問者:2009032609
  • 投稿日時:2009/03/26 16:44
  • 困り度:困ってます
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

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"
""

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:5件)
  • 参考になった:0件

No.3ベストアンサー10pt

  • 回答者:Gotthold
  • 回答日時:2009/03/26 21:00

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

p l.sub(/^.+$/, "aaaaaaa\\&bbbbbb")

通報する

この回答へのお礼

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

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

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

  • 参考になった:0件
  • 回答者:masa_pee
  • 回答日時:2009/03/26 18:18

> .sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?
質問者さんがどう出力したいのかわからないので回答できません。どういう出力が欲しいのか具体的に補足したほうがいいと思います。

通報する

この回答への補足

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

  • 参考になった:0件

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/・・・/・・・/
の代わりができないことがわかりました。

  
このQ&Aは役に立ちましたか?(役に立った:5件)

このページのトップへ

Facebook公式ページ

公式Twitter