Edit report at https://bugs.php.net/bug.php?id=50887&edit=1
ID: 50887
Comment by: c dot clix at tiscali dot it
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:
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.
Previous Comments:
------------------------------------------------------------------------
[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] [email protected]
I don't think we can change that behaviour at this point for the sake of not
brekaing BC.
------------------------------------------------------------------------
[2010-01-30 16:58:58] harrrrpo at gmail dot com
Description:
------------
in preg_match , when optional sub-patterns (using ? or {0,n} ) are the last
sub-patterns and empty (e.g. not matched) they are ignored in $matches array
this behavior is inconsistent with preg_match_all , and with the case when the
empty optional sub-pattern isn't the last one
Reproduce code:
---------------
$str="1";
preg_match("#\d(\d)?#",$str,$mt);
var_dump($mt);
Expected result:
----------------
array(2) {
[0]=>
string(1) "1"
[1]=>
string(0) ""
}
(the string(0) "" does appear on all cases with preg_match_all , and with
preg_match , when there is any additional sub-patterns after it)
Actual result:
--------------
array(1) {
[0]=>
string(1) "1"
}
(the value of sub-pattern vanished)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=50887&edit=1