Code Journey

30代未経験からプログラミング挑戦中(追うものは追われる者に勝る)

rubyで正規表現で扱う時に%rを使うと便利

はじめに

私は現在、フィヨルドブートキャンプで、未経験からプログラミング学習をしているものになります。

この記事は、自分自身が学習したことをまとめ、アウトプットすることを目的として書いていますので、間違いがある可能性がありますのでご注意ください。

ruby正規表現を使ってURLを抜き出す際にスラッシュが多くてみにくい問題

学習しているプラクティスの中で、文字列中の特定のURL(http://localhost:3000/reports/日報のid)を抜き出す場面がありました。

String#scan (Ruby 3.2 リファレンスマニュアル)メソッドを使ってhttp://localhost:3000/reports/日報のidを抜き出すコードは以下のようになります。

content.scan(/http:\/\/localhost:3000\/reports\/\d+/)

これでも実現はできるのですが、どうしても/(スラッシュ)が多くなるのでその都度、エスケープの\(バックスラッシュ)が多くなりとても見にくいです\(^o^)/

%rを使った書き方にするととても見やすい

書式は以下の通りです。

%r{パターン}

これを先ほどの例に当てはめると以下のようになります。

content.scan(%r{http://localhost:3000/reports/\d+})

これで非常に見やすくなりました。

他の記述パターン

%r で始まり、対になった区切り文字で文字の集合を囲うことで文字列を作成できるので以下のような記号を使うこともできます。

%r[パターン]
%r(パターン)
%r<パターン>
%r|パターン|
%r!パターン!
%r*パターン*

逆に区切り文字に使用した文字がパターン内で現れる場合にはエスケープが必要な点には注意が必要です。パターン内で使用されない区切り文字を使うのが良さそうです。