[PHP-users 34975] Re: 正規表現におけるアスタリスクのマッチについて
Yoshiaki Yanagimoto
yanagimoto @ ask-art.jp
2010年 1月 27日 (水) 16:19:37 JST
柳本です。
ブラケット内のハイフンは範囲指定として解釈されるので、
ハイフン自体を指定する場合はエスケープが必要です。
(2010/01/27 16:10), Kentaro Ohkouchi wrote:
> 大河内と申します.
>
> 正規表現関数を使用して「文字列の中にアスタリスクを含む場合 false」という
> パターンを書こうとしたところ, 以下のような動作になりました.
>
> <?php
> $word = 'word(*';
> var_dump(preg_match('/^[a-zA-Z0-9 \\,.\(\)-\/]+$/', $word));
> var_dump(preg_match('/^[\/a-zA-Z0-9 \\,.()-]+$/', $word));
> ?>
>
> 実行結果:
>
> int(1)
> int(0)
>
> パターンの中のスラッシュ(/)の位置を, ] の直前にすると true を返し, ] の
> 直前以外の場所に置くと, false を返します.
>
> ereg 関数でも, 同様です.
>
> <?php
> $word = 'word(*';
> var_dump(ereg('^[[:alnum:][:space:]\\,.()-/]+$', $word));
> var_dump(ereg('^[[:alnum:][:space:]/\\,.()-]+$', $word));
> ?>
>
> 実行結果:
>
> int(1)
> bool(false)
>
> スラッシュの位置によって, 結果が異なるのは仕様でしょうか?
> 何故, このような動作になるのか, いまいち理解できません.
>
> 仕様であれば, どのあたりのドキュメントを参照したらよろしいでしょうか?
> ご教示頂ければ幸いです.
>
> よろしくお願い致します.
>
PHP-users メーリングリストの案内