[PHP-users 11688] Re: 文字列のマッチングについて
Osamu Shigematsu
php-users@php.gr.jp
Fri, 22 Nov 2002 09:22:07 +0900
重松です。こんにちは。
On Friday, Nov 22, 2002, at 05:16 Asia/Tokyo, Moriyoshi Koizumi wrote:
> mb_ereg 系列は Shift_JIS でも問題なく使えます。
> あとは、内部エンコーディングが UTF-8 でもよければ preg系も大丈夫みたいです。
>
> # ereg 系も EUC だから必ずしも大丈夫ということはありません。
>
> (例) $result = preg_match("/日本語/u", "これは日本語ですか?");
>
> "u" をつけてください。"U"(大文字) ではありません。
これは知りませんでした。
# source ちゃんと読めよ。> 自分
> 蛇足ですが、実は、ソースを見る限りではテーブルを追加するだけで
> pcre を UTF-8 以外のマルチバイト文字に対応できるようなんですけど、
> なにしろそのあとが面倒なので…。こんな感じになりそうですし。
この辺少し脱線しますが、multibyte 文字環境における [] の実装って、
どのように最適化されているのでしょうか。
例えば、ctype のように、
const static int ctype_map[256] = { 0, .... 続く
のような表を抱えておき、
int match = ctype_map[char_index] & bit_mask;
のようにできればそれは速いでしょうが。
# 上記は、Metroweks CodeWarrior での実装例です。今は違うかも。
個人的には、[A-Zあ-んア-ン] だと、([A-Z]|[あ-んア-ン]) のように、
まず、バイト数ごとに分割して、その後に、[あ-ん][ア-ン] の部分を、
([あ-ん]|[ア-ン]) として、
あ = \xa4\xa2 ア = \xa5\xa2
ん = \xa4\xf3 ン = \xa5\xf3
なので、([A-Z]|\xa4[\xa2-\xf3]|\xa5[\xa2-\xf3]) とすればいいのかなと。
あとは、JIS にどうやって対処するのかが問題です。
# いえ、.qmail で Subject で filter したいんだけど、
# コーディングが楽で、軽い方法はないものかと...。
# iftocc では既に不足。
--
Osamu Shigematsu