header

正規表現で全角カンマ/ピリオドを句読点に置換する(その2)

(1/3)

前回の宿題を片付けよう。
全角小数で用いられる小数「.」や、整数部分の桁区切り文字である「,」については、句読点に変換しないようにする。これについても、場合分けすることなく、正規表現だけで解決できる。

置換の考え方

次のように考えてみると、うまく行く。

  1. カンマ「,」の扱い
    アラビア数字の後に「,」が来ない場合には「、」に置換する。
  2. ピリオド「.」の扱い
    「.」の後にアラビア数字が来ない場合には「。」に置換する。

これを正規表現で表すと、前回同様、2つを別々に行うことになるが、

$str1 = ereg_replace("([^0-90-9]),", "\\1、", $str0);
$str2 = ereg_replace(".([^0-90-9])", "。\\1", $str1);

変数 $str0 にはオリジナルのテキストが入っているものとする。 $str1 を作業用変数として、置換後のテキストは $str2 である。

今回使った正規表現

[ ]
文字クラス。
この中に記述された文字の並びのうちの1文字を表す。
-
文字の範囲指定。
a-z はアルファベット小文字すべてに、0-9は数字すべてにマッチする。
[^....]
文字クラス内の否定。文字クラス内“以外の”文字にマッチする。
( )
サブパターン。
マッチングだけであれば不要だが、置換を行うために、 マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
 

この正規表現を使ったサンプル・プログラムを次のページに掲載する。

(この項つづく)