サンプル・プログラムの実行例

サンプル・プログラム
nengo.php | サンプル・プログラム |
解説:西暦を和暦へ変換
320: /**
321: * 年号変換(和暦)
322: * @param string $sour オリジナル・テキスト
323: * @return string 変換後テキスト
324: */
325: function wareki($sour) {
326: $pat = '/([0-9〇一二三四五六七八九十百千万]+)年/ui';
327:
328: return preg_replace_callback($pat, 'seireki2wareki', $sour);
329: }
正規表現を利用し、テキスト中の年号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 seireki2wareki である。

ユーザー関数 seireki2wareki では、「PHPで漢数字を半角数字に変換する(整数版)」で作成した漢数字を数値に変換するユーザー関数 kan2num を呼び出して、漢数字を整数に変換しておく。
ユーザー関数 _seireki2wareki は、年表に従って、西暦を明治から平成までの元号に変換する。各元号の1年は「元年」としている。
この部分を追加すれば、江戸期以前の元号にも対応できる。
解説:和暦を西暦へ変換
371: /**
372: * 年号変換(西暦)
373: * @param string $sour オリジナル・テキスト
374: * @return string 変換後テキスト
375: */
376: function seireki($sour) {
377: $pat = '/(明治|大正|昭和|平成|令和)([0-9元〇一二三四五六七八九十百千万]+)年/ui';
378:
379: return preg_replace_callback($pat, 'wareki2seireki', $sour);
380: }
正規表現を利用し、テキスト中の元号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 wareki2seireki である。

ユーザー関数 wareki2seireki では、「PHPで漢数字を半角数字に変換する(整数版)」で作成した漢数字を数値に変換するユーザー関数 kan2num を呼び出して、漢数字を整数に変換しておく。
ユーザー関数 _wareki2seireki は、年表に従って、明治から平成までの元号を西暦に変換する。
解説:西暦・和暦混合変換
394: /**
395: * 年号変換(西暦・和暦混合)
396: * @param string $sour オリジナル・テキスト
397: * @return string 変換後テキスト
398: */
399: function mixture($sour) {
400: $sour = seireki($sour); //西暦に統一
401:
402: $pat = '/([0-9]+)年/ui';
403:
404: return preg_replace_callback($pat, 'seireki2mix', $sour);
405: }
まず、ユーザー関数 seireki を使って、入力テキスト中の年号を西暦に統一する。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数 preg_replace_callback を利用した。実際に置換を行うのはユーザー関数 seireki2mix である。ユーザー関数 _seireki2wareki を呼び出し、和暦も混在表示できるようにしている。
参考サイト
- PHPで漢数字を半角数字に変換する(整数版):ぱふぅ家のホームページ
- 復原した東京駅と十河信二の碑:ぱふぅ家のホームページ
- 西暦を和暦に変換する関数は?:Excel(エクセル)の使い方
- 西暦と元号の変換:働きアリ
- 元号の生年月日から年齢や西暦での生年月日を出力するソフト「年齢計算」:ITがある日常NEO
そこで今回は、テキスト中の年号を、和暦、西暦、西暦・和暦混合のいずれかに統一して変換するPHPプログラムを作ってみることにする。入力テキストは漢数字が混在していても変換できるようにする。対応する元号は明治、大正、昭和、平成だが、プログラムに追加すれば江戸期以前の元号も変換できる。
改元の月日を認識し、飛鳥時代の最初の元号「大化」(645年)まで遡って変換できるPHPプログラムについては、「PHPでテキスト中の和暦・西暦年号を統一する(その2)」を参照されたい。
(2021年7月10日)PHP8対応,「令和」追加,コピー・ボタン追加