[PHP-users 2703] Re: mbregex のインストール

Osamu Shigematsu php-users@php.gr.jp
Mon, 15 Oct 2001 16:34:55 +0900


重松です。

> mbereg("[^ぁ-ん,ヽ-ゞ,ー]",$name);

とりあえず、[X-Y] とか、[^X-Y] はエンコーディング依存なので、
mbereg の defaultencoding が何であるか、
と言う情報も重要かも知れません。:-)

何れにしても、上の正規表現がおかしいことは明かですけど。
[^] は含まないと言う意味ですから、平仮名が含まれない任意の一文字
という意味になります。

たとえば、仮名等を入力させる場合、全ての文字が平仮名で構成され、
空でないことが一般的に、

  if(!mbereg('^[あ-ん]+$',$name_kana)){ /* あ-ん は適当 */
    die('ふりがなに使えない文字が含まれているか、空です。');
  }

と言うような感じの処理になるかと思います。

それとも、

  if(mbereg('[^あ-ん]',$name)):

というような処理なのでしょうか?

何れにしても、, が複数ある必要は無いと思います。

それから、どうでも良いことかも知れませんが、片仮名にはあっても、
平仮名には無い文字がありますから、普通読み仮名には、片仮名を
使った方が良いと思います。たとえば、「ヴ」とか。

> > 正規表現は、人間が分かる型式での記述を parse し、木構造に変換、
> > その後に NFA, FDA とよばれるデータ型式に変換します。そして、
> > これらの一連の作業を「正規表現のコンパイル」といいます。

typo がありました。。。DFA ですね。

あと、PHP 4.x の mbereg() は ruby ゆずりみたいですけど、
GNU のコードの malloc() に失敗したときにそれを確認しないバグを
そのまま引きずっているようなんですけど、これって、私の
ソースコードの読みまちがいでしょうか?
PHP-dev で同じネタを質問したのですが、情報を頂けなかったので、再度。
# ruby は malloc() には失敗しないですが、PHP も失敗しない?

-- 
Osamu Shigematsu
mailto:shige@ravi.ne.jp