ID: 41496
Updated by: [EMAIL PROTECTED]
Reported By: m_v_ at gmx dot net
-Status: Open
+Status: Assigned
Bug Type: PCRE related
Operating System: Windows Vista Home Premium
PHP Version: 5CVS-2007-05-25 (snap)
-Assigned To:
+Assigned To: nlopess
Previous Comments:
------------------------------------------------------------------------
[2007-05-25 09:57:53] m_v_ at gmx dot net
Description:
------------
preg_split behaves unexpectet with certain pattern (see reproduce
code):
It returns tripple offsets with the offsetvalue -1.
It gets even worse when you replace:
$reg = "~\{(literal)\}(.*?)\{(/literal)\}|\{(.*?)\}~s";
with
$reg = "~\{\*(literal)\}(.*?)\{(/literal)\}|\{(.*?)\}~s";
it simply returns several off those empty string, offset -1 triples.
P.S.: Hope it is actually a bug and not my ignorance of regex, however
i asked in a forum if anybody knew where the mistake is and i got no
answer and in addition the offset -1 mykes it look like a bug to me.
If it however should be a mistake in my regex it would be kind if you
would let me know how to put it.
Thx in advance
Reproduce code:
---------------
$reg = "~\{(literal)\}(.*?)\{(/literal)\}|\{(.*?)\}~s";
echo $reg.'<br>';
$res = preg_split( $reg, "df{g}s{literal}asd{as}d{/literal}", -1,
PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_OFFSET_CAPTURE );
echo '<pre>'.print_r($res, 1).'</pre>';
Expected result:
----------------
~\{(literal)\}(.*?)\{(/literal)\}|\{(.*?)\}~s
Array
(
[0] => Array
(
[0] => df
[1] => 0
)
[1] => Array
(
[0] => g
[1] => 3
)
[2] => Array
(
[0] => s
[1] => 5
)
[3] => Array
(
[0] => literal
[1] => 7
)
[4] => Array
(
[0] => asd{as}d
[1] => 15
)
[5] => Array
(
[0] => /literal
[1] => 24
)
[6] => Array
(
[0] =>
[1] => 33
)
)
Actual result:
--------------
~\{(literal)\}(.*?)\{(/literal)\}|\{(.*?)\}~s
Array
(
[0] => Array
(
[0] => df
[1] => 0
)
[1] => Array
(
[0] =>
[1] => -1
)
[2] => Array
(
[0] =>
[1] => -1
)
[3] => Array
(
[0] =>
[1] => -1
)
[4] => Array
(
[0] => g
[1] => 3
)
[5] => Array
(
[0] => s
[1] => 5
)
[6] => Array
(
[0] => literal
[1] => 7
)
[7] => Array
(
[0] => asd{as}d
[1] => 15
)
[8] => Array
(
[0] => /literal
[1] => 24
)
[9] => Array
(
[0] =>
[1] => 33
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=41496&edit=1