ID: 36983 User updated by: crisp at tweakers dot net Reported By: crisp at tweakers dot net -Status: Bogus +Status: Closed Bug Type: PCRE related Operating System: all PHP Version: 4.4.2 New Comment:
Indeed this seems to be an issue with PCRE; version 6.6 still has this problem so I'll try my luck with the PCRE team. Notwithstanding I don't believe 'bogus' is the right status for this bug since it is an actual issue, just not with PHP (although afaik PHP still ships with PCRE version 6.4). I'll just put this bug to 'closed' Previous Comments: ------------------------------------------------------------------------ [2006-04-05 14:36:06] [EMAIL PROTECTED] If there is a problem, it is PCRELib problem. Please report it to PCRELib developers. ------------------------------------------------------------------------ [2006-04-05 12:41:15] crisp at tweakers dot net Description: ------------ It seems that when PCRE needs to backtrack more than 20 characters in order to evaluate an OR'ed expression the results of a preg_match_all are incorrect/incomplete. See below code as an example. Reproduce code: --------------- $foo = 'foo# bar# abcdefghijklmnopqrst bla#'; echo '$foo = ', $foo, "\n"; preg_match_all('/([a-y]|z)+#/', $foo, $matches1); preg_match_all('/([a-y]+|z)+#/', $foo, $matches2); print_r($matches1[0]); print_r($matches2[0]); $foo = 'foo# bar# abcdefghijklmnopqrstu bla#'; echo '$foo = ', $foo, "\n"; preg_match_all('/([a-y]|z)+#/', $foo, $matches1); preg_match_all('/([a-y]+|z)+#/', $foo, $matches2); print_r($matches1[0]); print_r($matches2[0]); Expected result: ---------------- both expressions for both strings should give the following output: Array ( [0] => foo# [1] => bar# [2] => bla# ) Actual result: -------------- The last expression gives the following output on the last string: Array ( [0] => foo# [1] => bar# ) The last match on bla# is missing in the result for the preg_match_all ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36983&edit=1