人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ruby の質問です。
正規表現のグループにマッチした部分のみ置換するにはどうしたら良いですか?

例えば
/^aaa\s+(\d+)\s+bbb$/
という正規表現で真ん中の数字の部分のみ 'HOGE' に置換します。

"aaa 123456789 bbb" # => "aaa HOGE bbb"

実際にはもう少し複雑な正規表現で、グループも2つ以上あります。


●質問者: 匿名質問者
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

後に残す部分を括弧でくくると置換が容易になります。
マッチした部分は大外の括弧から順に¥1,¥2…で参照することが出来、
下記全て'aaa HOGE bbb'になりますので確認してみてください。

p 'aaa 123456789 bbb'.gsub(/^(aaa\s+)\d+(\s+bbb$)/, '\1HOGE\2');
p 'aaa 123456789 bbb'.gsub(/^(aaa\s+)(\d+)(\s+bbb$)/, '\1HOGE\3');
p 'aaa 123456789 bbb'.gsub(/^((aaa\s+)(\d+)(\s+bbb$))/, '\2HOGE\4');

学習用に数パターン用意しましたが、後方でいらない部分まで括弧にくるむ必要はないので、実際のコードで採用するならば一番上のものになります。

p 'aaa 123456789 bbb'.gsub(/^(aaa\s+)\d+(\s+bbb$)/, '\1HOGE\2');

http://doc.ruby-lang.org/ja/1.9.3/method/String/i/gsub.html

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ