PHPで文字列から数字・漢数字だけを抽出する方法とコード例

PHPで文字列から数字を抽出

たとえば何か規則性のある大量のデータ(CSV、JSON)がある場合、番号を表してるけど余計な文字列も入っているケースは少し厄介です。

▼ そういうデータの例

  • "ワンピース 第87巻"
  • "鬼滅の刃 16巻"
  • "こち亀 第百十三巻"

こういった大量のデータがあり、そこで「第87巻」なら「87」というように数字部分だけ抜き出したかったです。(全角・漢数字でも同じことがしたかった・・・)

その方法をコード例と一緒に記録します。
ただし小数点などには対応していません。

方法1.抽出対象が半角数字のみの場合

まずは半角数字のみの場合について。

これは正規表現を使えば簡単ですね。

▼ このようなコード例

▼ このコードの出力結果

当然ながら「第16巻」とか「第百十三巻」などの数字は抽出できていません。純粋に半角数字だけを抜き出すならこれでもOKだけど...

方法2.全角数字も対象にして文字列から数字抽出

範囲を広くして全角数字も対象に

そういう場合は次のようなコードで可能です。

▼ こういうコードを書いてみた

▼ このコードの出力結果

ポイントは mb_convert_kana($vol_num, 'kvrn')  のように全角を半角に変換することです。第2引数が変換時のオプション文字列

詳しくは次のPHPマニュアルを見てください。

これで全角数字でも抽出ができるように

普通の用途ならこれで十分ですね。

方法3.漢数字も対象にして文字列から数字抽出

これは一筋縄でいかない難しい問題

でも解決策はあって、先人が「漢数字 ⇒ 半角数字」に変換するためのスクリプトを公開されていました。これで漢数字にも対応できます。

▼ ここで公開されているスクリプト

たとえば「十二万三千四百五十六」という漢数字があるなら、それを「123456」という風にスマートに解釈して変換してくれます。

これを使えば漢数字の抜き出しも可能です。

▼ こういうコードを書いてみた

▼ このコードの出力結果

このコードの kan2num($vol_num, 3);  というのが公開されているスクリプトで定義されている関数です。この使い方は作者様のHPをご覧ください。

文字列から数字だけ抽出する方法のまとめ

用途に応じて次の3つが使用可能

もし間違いなどあればご指摘ください。

以上、PHPによる数字抽出でした。ではまた