[PHP-users 3149] Re: textarea の内容をCSV に書きたいが

Osamu Shigematsu php-users@php.gr.jp
Fri, 26 Oct 2001 17:14:21 +0900


重松です。ほとんど重箱の隅つつきですが、

on 01.10.26 4:51 PM, m.yoshida at yoshida@glovix.com wrote:

> $off_str = mbereg_replace(, "(\r|\r\n|\n)","\\n",$str,"i");
> ↑**
> こうですね・・・

http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/php-book/supplement.html

int mbereg_replace(string pattern, string replacement, string str [, string
option])

とありますから、引数の数が合わないです。

また、正規表現って、普通は書いた順にマッチを試みると思いますし、一般的な
User Agent はサーバと同じ文字コード体系 (改行コードも) で post してきますか
ら、たとえば、Shift_JIS, CR+LF ならば、\r\n?|\n と書いた方が高速に動くと思い
ます。多分。

それと、おそらく、正規表現のコンパイル時に多少の最適化はかかると思いますが、
\r|\r\n|\n と書くよりも、\r\n?|\n と書けば、\r にマッチしたときに、次に \n
があってもなくても良くなり、遷移状態がわかりやすいので、無駄の少ない
automaton が作成され、エンジンの実装を問わずに速いと思います。試してないです
けど。

それから、i ですが、指定しても、意味はまったくありません。マッチさせようとす
る文字列には、大文字、小文字の組み合わせがある文字がないので。正規表現をコン
パイルするときに遅くなるか、実装によっては、マッチする際にも遅いかも知れませ
ん。

また、0x20 未満の文字は、私の記憶が確かならば、マルチバイト文字 (Shift_JIS,
UTF-8) の 2 バイト目 (以降) に来ることはないので、mbereg ではなくて、eregi
でも問題ないと思います。EUC の場合は、、、多分こなかったと思うんですが、手元
に CJKV がないのでわかりません、ゴメンなさい。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp