この記事は何
shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。
書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。
例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160
実行環境など
- Docker image: ruby:3.0.2
- 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に
answer-ruby
ディレクトリを作り、その中に解答となるファイルを作成していきます。
今回のテーマ
#24
以降、しばらく題材的に取り組みづらいものが続くので#31
まで飛ばします。
$ sed -r 's/(<strong>)([^<]+)/\1\U\2/' iampen.txt
<strong> </strong>
タグで囲まれた範囲内を大文字に変更する処理です。
解
text = File.open('qdata/31/iampen.txt').read
puts text.gsub(/(<strong>)([^<]+)/) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).upcase}" }
所感
- マッチしたパターン
$1
、$2
で使えば良いのですが、rubocopさんはRegexp.last_match(n)
推しですね。この辺はフォーマッタにお任せしちゃいましょう。