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

サンプル・プログラム
kutoten2.php | サンプル・プログラム本体 |
置換の考え方
次のように考えてみると、うまく行く。

これを正規表現で表すと、前回同様、2つを別々に行うことになるが、
- カンマ「,」の扱い→アラビア数字の後に「,」が来ない場合には「、」に置換する。
- ピリオド「.」の扱い→「.」の後にアラビア数字が来ない場合には「。」に置換する。

これを正規表現で表すと、前回同様、2つを別々に行うことになるが、
$str1 = ereg_replace("([^0-90-9]),", "\\1、", $str0);変数 $str0 にはオリジナルのテキストが入っているものとする。$str1 を作業用変数として、置換後のテキストは $str2 である。
$str2 = ereg_replace(".([^0-90-9])", "。\\1", $str1);
今回使った正規表現
- [...]
- 文字クラス。
この中に記述された文字の並びのうちの1文字を表す。
- -
- 文字の範囲指定。
a-z はアルファベット小文字すべてに、0-9は数字すべてにマッチする。
- [^....]
- 文字クラス内の否定。
文字クラス内“以外の”文字にマッチする。
- (...)
- サブパターン。
マッチングだけであれば不要だが、置換を行うために、マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
サンプル・プログラムの解説
149: /**
150: * 「,」を「、」に、「.」を「。」に置換する
151: * @param string $sour 元のテキスト
152: * @return string 置換後テキスト
153: */
154: function myformat($sour) {
155: //合致パターン
156: $reg[1] = "([^0-90-9]),";
157: $reg[2] = ".([^0-90-9])";
158: $reg[3] = ".$";
159: //置換パターン
160: $rep[1] = "\\1、";
161: $rep[2] = "。\\1";
162: $rep[3] = "。";
163:
164: $dest = $sour;
165: foreach ($reg as $key=>$val) {
166: $dest = preg_replace("/{$val}/u", $rep[$key], $dest);
167: }
168: return $dest;
169: }
サンプル・プログラムのフローは、前回とまったく同じである。置換を行うためにユーザー関数 myform を変更しただけだ。
活用例
みんなの知識 ちょっと便利帳では、「全角ピリオド/カンマを句読点に変換」「句読点を全角ピリオド/カンマに変換」「読点を全角カンマに変換」のコーナーで、このサンプル・プログラムを活用している。ありがとうございます。
参考サイト
- 正規表現で全角カンマ/ピリオドを句読点に置換する:ぱふぅ家のホームページ
- 全角ピリオド/カンマを句読点に変換:みんなの知識 ちょっと便利帳
- 句読点を全角ピリオド/カンマに変換:みんなの知識 ちょっと便利帳
- 読点を全角カンマに変換:みんなの知識 ちょっと便利帳
(この項おわり)
全角小数で用いられる小数「.」や、整数部分の桁区切り文字である「,」については、句読点に変換しないようにする。これについても、場合分けすることなく、正規表現だけで解決できる。
(2021年8月16日)PHP8対応,リファレンスチェック改良