ID:               43104
 User updated by:  ch+php at 1111-internet dot com
 Reported By:      ch+php at 1111-internet dot com
-Status:           Wont fix
+Status:           Closed
 Bug Type:         PCRE related
 Operating System: n/a
 PHP Version:      4.4.7
 New Comment:

No problem - I understand why this shouldn't be changed, and in my
particular case I was able to work around it by adding a non-optional
match after the optional one. So bug closed.

Thanks to the entire PHP team for building and maintaining a great
product!


Previous Comments:
------------------------------------------------------------------------

[2008-01-13 15:05:47] [EMAIL PROTECTED]

Yeah, it has been like this for ages, so we can't "fix" it. It will
only add the optional captures if they are in the middle. In that case
we add some empty padding values.

------------------------------------------------------------------------

[2007-11-23 01:32:21] [EMAIL PROTECTED]

This is expected for flag different of default. (PREG_PATTERN_ORDER)

------------------------------------------------------------------------

[2007-10-24 23:53:26] ch+php at 1111-internet dot com

Description:
------------
The code and results attached show two examples of preg_* demonstrating
how an optional parenthesis match at the end of a regular expression is
not being captured if the optional condition is not matched.

I think this is a bug, because if the optional parenthesis is not the
last one in the regex, the empty value IS captured - which suggests that
it should not be omitted just because it happens to be the last one.


Reproduce code:
---------------
preg_match_all("/(1)(23)?/", "12314123", $match, PREG_SET_ORDER);
print_r($match);
print_r(preg_split("/(1)(23)?/", "12314123", -1,
PREG_SPLIT_DELIM_CAPTURE));


Expected result:
----------------
Array
(
    [0] => Array
        (
            [0] => 123
            [1] => 1
            [2] => 23
        )

    [1] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 
        )

    [2] => Array
        (
            [0] => 123
            [1] => 1
            [2] => 23
        )

)
Array
(
    [0] => 
    [1] => 1
    [2] => 23
    [3] => 
    [4] => 1
    [5] => 
    [6] => 4
    [7] => 1
    [8] => 23
    [9] => 
)


Actual result:
--------------
Array
(
    [0] => Array
        (
            [0] => 123
            [1] => 1
            [2] => 23
        )

    [1] => Array
        (
            [0] => 1
            [1] => 1
        )

    [2] => Array
        (
            [0] => 123
            [1] => 1
            [2] => 23
        )

)
Array
(
    [0] => 
    [1] => 1
    [2] => 23
    [3] => 
    [4] => 1
    [5] => 4
    [6] => 1
    [7] => 23
    [8] => 
)



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=43104&edit=1

Reply via email to