前回の宿題を片付けよう。
全角小数で用いられる小数「.」や、整数部分の桁区切り文字である「,」については、句読点に変換しないようにする。これについても、場合分けすることなく、正規表現だけで解決できる。
置換の考え方
次のように考えてみると、うまく行く。
- カンマ「,」の扱い
アラビア数字の後に「,」が来ない場合には「、」に置換する。 - ピリオド「.」の扱い
「.」の後にアラビア数字が来ない場合には「。」に置換する。
これを正規表現で表すと、前回同様、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は数字すべてにマッチする。
- [^....]
- 文字クラス内の否定。文字クラス内“以外の”文字にマッチする。
- ( )
- サブパターン。
マッチングだけであれば不要だが、置換を行うために、 マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
この正規表現を使ったサンプル・プログラムを次のページに掲載する。
(この項つづく)
| 2007年02月08日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |