header

正規表現で整数の桁区切りを行う

(1/3)

整数をカンマ区切りに変換するのは number_format 関数 を使えば簡単にできる。 では、テキスト中に何度も登場する整数をカンマ区切りにするにはどうしたらいいか、 さらには「12345」を「1万2345」のように漢字区切り数字に変換するにはどうしたらいいだろうか。
これも、PHPと正規表現を使えば簡単に変換できる。

考え方

カンマ区切りと漢字区切りは分けて考えることにする。

まずカンマ区切りの方だが、 テキスト中から整数だけを切り出せれば、 あとは number_format 関数を使って変換することができる。 テキスト中から数字のみを切り出すなら、正規表現を使って簡単に実現できるはずだ。
PHPには便利な関数がある。 preg_replace_callback 関数 は、1バイト文字にしか対応していないが、 指定した正規表現にマッチする部分文字列に対し、 指定した関数を実行し、その結果を使って部分文字列を置換するというものである。 日本語で書くと冗長になるが、要は、'[0-9]+' にマッチする部分文字列に対して number_format 関数を適用すれば良いという話である。

次に、漢字区切りの方だが、万、億、兆、京‥‥と、 コード上は何の規則性もない1文字を差し込んでいかなければならないので、 力技で処理するしか無さそうだ。
最初に、万、億、兆、京‥‥のテーブルを作っておき、 与えられた整数を1京で割った商に '京' を付加し、剰余を1兆で割った商に'兆'を付加し‥‥ と繰り返して処理することにする。

(この項つづく)