[PHP-users 22275]ereg関数の引数による戻り値の違いについて

Masayuki AOKI info @ martin.bz
2004年 6月 18日 (金) 23:43:59 JST


こんばんは,martinです。
別に質問というわけではないのですが,「ふーん」と思ったことが
あり,マニュアルに明言なく過去ログにもないようなので。

ereg関数で,第3引数を指定しない場合の返り値は,int(1) or bool(false)
ですが,第3引数を指定するとマッチしたstring patternのバイト数を返す
ようです。これはmb_eregでもそうでした。

[例]
  $str = "012345abcdef";
  var_dump( ereg("5abc", $str) );

の結果は,int(1) となり,
  $str = "012345abcdef";
  var_dump( ereg("5abc", $str, $reg) );

の結果は,int(4) です。
 だから何と言われればそれまでですが,例えば次のようなスクリプトは
意図した通り(.....を実行させたい)には作動しません。

[例]
  $str = "012345abcdef";
  if(ereg("5abc", $str, $reg)==1){
    .....
  }

まぁ通常はこういう書き方はしないでしょうが。普通に

  if(ereg("5abc", $str, $reg)){
    .....
  }

とすれば期待した動作をします。参考までに。


/*
 Masayuki AOKI: maoki @ bioreg.kyushu-u.ac.jp
                           http://martin.bz
*/



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