PHPでテキスト中の和暦・西暦年号を統一(Windowsアプリ版)

(1/1)
PHP でテキスト中の和暦・西暦年号を統一する」では、 正規表現を使って、テキスト中の年号を、和暦、西暦、西暦・和暦混合のいずれかに統一して変換する PHP プログラムを作った。今回は、このプログラムを Windows アプリに移植する。

サンプル・プログラム

PHPでWindowsアプリ開発:和暦・西暦年号を統一

サンプル・プログラムの解説:西暦を和暦へ変換

0191: /**
0192:  * 年号変換(和暦)
0193:  * @param string $sour オリジナル・テキスト
0194:  * @return string 変換後テキスト
0195: */
0196: function wareki($sour) {
0197:     $pat = '([0-9〇一二三四五六七八九十百千万]+)年';
0198:     $items = array();
0199: 
0200:     mb_ereg_search_init($sour$pat);
0201:     while (($arr = mb_ereg_search_regs()) != FALSE) {
0202:         if (isset($arr[1]) && ($arr[1] != '')) {
0203:             $items[$arr[0]] = seireki2wareki($arr);
0204:         }
0205:     }
0206:     foreach ($items as $key=>$val) {
0207:         $sour = mb_ereg_replace($key$val$sour);
0208:     }
0209: 
0210:     return $sour;
0211: }

PHP でテキストの読みやすさを調べる(Windows アプリ版)」でも触れたが、bamcompile で EXE プログラムをつくる場合、preg 系関数が正常に働かない。
そこで、ユーザー関数 wareki の中身を  mb_ereg  系関数で代替することにしたが、あいにく  mb_ereg_replace_callback  関数が PHP 5 以降でないと利用できない。
仕方が無いので、 mb_ereg_search_init , mb_ereg_search_regs , mb_ereg_replace  の 3 つの関数を使って代替する。

手順としては、テキストの最初から  mb_ereg_search_regs  関数でマッチする文字列を洗い出し、逐次、配列 $items に入れていく。次に、配列 $items にマッチする文字列を  mb_ereg_replace  関数を使って置換してゆく。

なお、下請けのユーザー関数 seireki2wareki_seireki2wareki は、そのまま使える。

ユーザー関数 seirekimixture についても、同様に  mb_ereg  系関数で代替してゆく。

コンパイル

コマンドラインから "bamcompile nengowin.bcp" を実行する。コンパイルが完了すると、"nengowin.exe" が生成される。"nengowin.exe" は、DLL 不要で、単独で動作する EXE プログラムである。

参考サイト

(この項おわり)
header