[PHP-users 34974] 正規表現におけるアスタリスクのマッチについて

Kentaro Ohkouchi nanasess @ fsm.ne.jp
2010年 1月 27日 (水) 16:10:10 JST


大河内と申します.

正規表現関数を使用して「文字列の中にアスタリスクを含む場合 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)

スラッシュの位置によって, 結果が異なるのは仕様でしょうか?
何故, このような動作になるのか, いまいち理解できません.

仕様であれば, どのあたりのドキュメントを参照したらよろしいでしょうか?
ご教示頂ければ幸いです.

よろしくお願い致します.

-- 
大河内健太郎(Kentaro Ohkouchi)
E-mail nanasess @ fsm.ne.jp



PHP-users メーリングリストの案内