[PHP-users 31927] Re: 検索結果を第3引数に代入する時のpreg_match()の挙動について
hasebe17 @ mail.goo.ne.jp
hasebe17 @ mail.goo.ne.jp
2007年 4月 16日 (月) 07:07:23 JST
長谷部です。
どうやら仕様らしいということですね。
tuchidaさん、ありがとうございました。
正規表現の書き換えですが、括弧が入れ子になると今回のように簡単にはできないので、
他の方法を考えてみました。
1. 空文字列を追加するコードを書く
preg_match('/(string)?;(string)?;(string)?/', ';string;', $matches);
$matches = $matches + array_fill(0, 99, '');
要素を99個作るのは、正規表現が変わっても対応できるようにするためです。
2. preg_match_all()を使う
preg_match_all('/(string)?;(string)?;(string)?/', ';string;', $matches);
これで試してみたところ、$matches[1][0]と$matches[3][0]に空文字列が入りました。
# それにしても、今回のpreg_match()の挙動には悩まされました。
# 値を厳密に比較する場合や、E_NOTICEを出さないようにコーディングする場合、
# 同じ (string)? でも値が入ったり入らなかったりというのは不便ですね。
[テスト環境]
Windows XP Professional
Apache 2.0.59
PHP 5.2.0
PHP-users メーリングリストの案内