Bug #50887 [Com]: preg_match , last optional sub-patterns ignored when empy
| From: | c639615 at trbvn dot com | 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