サンプル・プログラムの実行例
サンプル・プログラム
nengo.php | サンプル・プログラム |
解説:西暦を和暦へ変換
0320: /**
0321: * 年号変換(和暦)
0322: * @param string $sourオリジナル・テキスト
0323: * @return string変換後テキスト
0324: */
0325: function wareki($sour) {
0326: $pat = '/([0-9〇一二三四五六七八九十百千万]+)年/ui';
0327:
0328: return preg_replace_callback($pat, 'seireki2wareki', $sour);
0329: }
正規表現を利用し、テキスト中の年号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。
パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 seireki2wareki である。
ユーザー関数 seireki2wareki では、「PHPで漢数字を半角数字に変換する(整数版)」で作成した漢数字を数値に変換するユーザー関数 kan2num を呼び出して、漢数字を整数に変換しておく。
ユーザー関数 _seireki2wareki は、年表に従って、西暦を明治から平成までの元号に変換する。各元号の1年は「元年」としている。
この部分を追加すれば、江戸期以前の元号にも対応できる。
解説:和暦を西暦へ変換
0371: /**
0372: * 年号変換(西暦)
0373: * @param string $sourオリジナル・テキスト
0374: * @return string変換後テキスト
0375: */
0376: function seireki($sour) {
0377: $pat = '/(明治|大正|昭和|平成|令和)([0-9元〇一二三四五六七八九十百千万]+)年/ui';
0378:
0379: return preg_replace_callback($pat, 'wareki2seireki', $sour);
0380: }
正規表現を利用し、テキスト中の元号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。
パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 wareki2seireki である。
ユーザー関数 wareki2seireki では、「PHPで漢数字を半角数字に変換する(整数版)」で作成した漢数字を数値に変換するユーザー関数 kan2num を呼び出して、漢数字を整数に変換しておく。
ユーザー関数 _wareki2seireki は、年表に従って、明治から平成までの元号を西暦に変換する。
解説:西暦・和暦混合変換
0394: /**
0395: * 年号変換(西暦・和暦混合)
0396: * @param string $sourオリジナル・テキスト
0397: * @return string変換後テキスト
0398: */
0399: function mixture($sour) {
0400: $sour = seireki($sour); //西暦に統一
0401:
0402: $pat = '/([0-9]+)年/ui';
0403:
0404: return preg_replace_callback($pat, 'seireki2mix', $sour);
0405: }
まず、ユーザー関数 seireki を使って、入力テキスト中の年号を西暦に統一する。
パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 seireki2mix である。ユーザー関数 _seireki2wareki を呼び出し、和暦も混在表示できるようにしている。
参考サイト
- PHPで漢数字を半角数字に変換する(整数版):ぱふぅ家のホームページ
- 復原した東京駅と十河信二の碑:ぱふぅ家のホームページ
- 西暦を和暦に変換する関数は?:Excel(エクセル)の使い方
- 西暦と元号の変換:働きアリ
- 元号の生年月日から年齢や西暦での生年月日を出力するソフト「年齢計算」:ITがある日常NEO
そこで今回は、テキスト中の年号を、和暦、西暦、西暦・和暦混合のいずれかに統一して変換するPHPプログラムを作ってみることにする。入力テキストは漢数字が混在していても変換できるようにする。対応する元号は明治、大正、昭和、平成だが、プログラムに追加すれば江戸期以前の元号も変換できる。
改元の月日を認識し、飛鳥時代の最初の元号「大化」(645年)まで遡って変換できるPHPプログラムについては、「PHPでテキスト中の和暦・西暦年号を統一する(その2)」を参照されたい。
(2021年7月10日)PHP8対応,「令和」追加,コピー・ボタン追加