PHPでテキスト中の和暦・西暦年号を統一する

(1/1)
テキスト中に和暦と西暦が混在していると読みにくい。
そこで今回は、テキスト中の年号を、和暦、西暦、西暦・和暦混合のいずれかに統一して変換するPHPプログラムを作ってみることにする。入力テキストは漢数字が混在していても変換できるようにする。対応する元号は明治、大正、昭和、平成だが、プログラムに追加すれば江戸期以前の元号も変換できる。

改元の月日を認識し、飛鳥時代の最初の元号「大化」(645年)まで遡って変換できるPHPプログラムについては、「PHPでテキスト中の和暦・西暦年号を統一する(その2)」を参照されたい。

(2021年7月10日)PHP8対応,「令和」追加,コピー・ボタン追加

目次

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

PHPでテキスト中の和暦・西暦年号を統一する

サンプル・プログラム

圧縮ファイルの内容
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: }

ユーザー関数 wareki では、西暦を和暦へ変換する。
正規表現を利用し、テキスト中の年号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数  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: }

ユーザー関数 seireki では、和暦を西暦へ変換する。
正規表現を利用し、テキスト中の元号表記にパターンマッチさせる。この時、漢数字もパターンに含めておく。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数  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: }

ユーザー関数 mixture では、西暦・和暦混合変換を行う。
まず、ユーザー関数 seireki を使って、入力テキスト中の年号を西暦に統一する。

パターンマッチと同時に年号の置換処理を行うために、組み込み関数  preg_replace_callback  を利用した。実際に置換を行うのはユーザー関数 seireki2mix である。ユーザー関数 _seireki2wareki を呼び出し、和暦も混在表示できるようにしている。

参考サイト

(この項おわり)
header