[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 メーリングリストの案内