Bug #50887 [Com]: preg_match , last optional sub-patterns ignored when empy

From: Date: Tue, 19 Apr 2016 01:04:18 +0000
Subject: Bug #50887 [Com]: preg_match , last optional sub-patterns ignored when empy
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-200640@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=50887&edit=1 ID: 50887 Comment by: c639615 at trbvn dot com Reported by: harrrrpo at gmail dot com Summary: preg_match , last optional sub-patterns ignored when empy Status: Wont fix Type: Bug Package: PCRE related Operating System: Windows PHP Version: 5.3.1 Block user comment: N Private report: N New Comment: If you can't/won't fix this bug, PLEASE AT LEAST DOCUMENT IT IN THE MANUAL!!! Previous Comments: ------------------------------------------------------------------------ [2011-08-03 12:37:58] cappuccino dot e dot cornetto at gmail dot com Delving into a fix for this bug, I found that it's not limited to last optional groups but to any last groups. In fact, the following: <code> $regex = '(?|(Sat)ur(day)|Sun(day)?)'; preg_match("@$regex@", 'Saturday', $matches); print_r($matches); preg_match("@$regex@", 'Sunday', $matches); print_r($matches); preg_match("@$regex@", 'Sun', $matches); print_r($matches); </code> prints: Array ( [0] => Saturday [1] => Sat [2] => day ) Array ( [0] => Sunday [1] => day ) Array ( [0] => Sun ) While it should print: Array ( [0] => Saturday [1] => Sat [2] => day ) Array ( [0] => Sunday [1] => day [2] => ) Array ( [0] => Sun [1] => [2] => ) ------------------------------------------------------------------------ [2011-07-13 08:35:20] c dot clix at tiscali dot it This is not a behaviour. This is a bug, causing occasional and unexpected errors with programs written based on the reference manual. Fixing the bug will avoid further occasional and unexpected errors. ------------------------------------------------------------------------ [2011-07-01 07:11:00] arveen dot ponniah at loginbn dot ch hello i'm tamilboy ------------------------------------------------------------------------ [2011-06-12 01:52:52] cappuccino dot e dot cornetto at gmail dot com I cannot imagine how fixing it would break anything older. If I expect 3 submatches from my pattern, but I get 2, then I know (for the bug) that the missing submatch is the last one and it’s an empty string. So I add it myself to the submatches array. Would a programmer do anything different to fix this bug? If the bug is fixed, it means that my old code will always get 3 submatches from that pattern. So my own fix won’t get triggered, and having the last submatch the same value (empty string) as the one my fix would have added, I won’t have any issue, except a bit of (stale) unused code. ------------------------------------------------------------------------ [2010-01-31 11:57:09] nlopess@php.net I don't think we can change that behaviour at this point for the sake of not brekaing BC. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=50887 -- Edit this bug report at https://bugs.php.net/bug.php?id=50887&edit=1

« previous php.bugs (#200640) next »