Rubyの正規表現について

Ruby正規表現の一部について覚書

例えば「大きな数値nをカンマ区切りで表示しなさい」という問題。

★条件

・N は自然数かつ、けた数が 3 の倍数
・N は 0 以上 10 ^ 1,000 以下("^"って"ハット/キャレット"っていう累乗の記号だったのか!初めて知った!)

★コード

n = gets.gsub(/(\d)(?=\d{3}+$)/, '\\1,')   # n = 123456789 => "123,456,789"

★解説

一つずつ解説します。

"gets" はユーザーからの入力を受け取るメソッド。つまり "n" 。 

"gsub"正規表現に基づく文字列の置換を行うメソッド。

 

そして正規表現についてです。

 

"/" から "/" (ここでは "/(\d)(?=\d{3}+$)/" まで)を正規表現にしていきます。

"\d" は1つの10進数の数字を表します。
"(   )" で()内の数字(ここでは "\d" )をキャプチャしています。

"?=" は、「肯定先読み」という表現で「ある位置から続く文字列(先読み、lookahead)とマッチする(肯定、positive)」であることを確認するものです。

"(?=\d{3}+$)" は、「次に続くのが3桁の数字で終わること」を確認しています。"\d" の後に続くのが3桁ずつで、最後はきっちり3桁で終わるようにしているわけです。

因みに、ここでの "$" は末尾を表しています。(ドルじゃないです)


そして、"\\1," は最初のキャプチャグループでキャプチャされた数字、つまり受け取った数字 "/(\d)(?=\d{3}+$)/""," で区切ることを指します。

 

一つひとつを覚えるのは大変ですね・・・。私も無理ですw

正規表現 (Ruby 3.2 リファレンスマニュアル)

も読み込むのはちょっときつい・・・。

今回はChatGTPや検索でこちらを参考にさせていただきました。

k-koh.hatenablog.com

 

プログラミング初心者のため、「これ間違ってるよ~!」などありましたらお知らせいただけると幸いです。