技術日記
PHP 5.2.1のPerl互換正規表現関数の非互換性?Edit

$regex = '/^(?:\/(?:(?:(?:[^\W_]|[-_.!~*\'()])|(?:%[\da-fA-F]{2})|[:@&=+$,;])*))+$/';
$path = '/entry/http://anond.hatelabo.jp/20070223015821';
echo preg_match($regex, $path);

というコードをPHP 4.4.1/4.3.11/5.1.4で実行すると、preg_matchが1を返した。でも、PHP 5.2.1(複数環境)で実行したところ0を返した。

上記正規表現は、Zend_Uri_Httpの中でpath要素のバリデーションに使われているもの。この動作のせいで、1470.netに登録できないURIが発生しているというところまでは追いかけたんだけど、ここで追跡頓挫中。

PHP 5.2.0でPCREのバージョンを上げたらしいけど、そのせいで発生している問題なのか? 5.2.0で試せる環境がないんだよなー。何か情報持っている方いませんか。

PHPのバグレポートを調べたところ

Bug #40195 PCRE Version 6.7 04-Jul-06 seems to have a bugが怪しいかも。っつーか、PHP 5.2.2を待つかtrunkに上げるかの2択ですか。

Published At2007-03-09 00:00Updated At2019-12-31 00:01