|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-02-09 13:53 UTC] peter dot bauwens at b-rail dot be
Description:
------------
If you use preg_split with the PREG_SPLIT_DELIM_CAPTURE flag, the delimiter is returned twice.
This bug also occurs in PHP 5.0.3.
I only added mssql and cpdf support in php.ini (has no relevance, I think).
Reproduce code:
---------------
<?php
$From = "HR_PersFunUit LEFT JOIN HR_Pers ON HR_PersFunUit.IDNR = HR_Pers.IDNR";
$Stukken = preg_split("/(( LEFT JOIN )|( RIGHT JOIN )|( INNER JOIN )|( ON ))/", $From, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($Stukken);
?>
Expected result:
----------------
Array
(
[0] => HR_PersFunUit
[1] => LEFT JOIN
[2] => HR_Pers
[3] => ON
[4] => HR_PersFunUit.IDNR = HR_Pers.IDNR
)
Actual result:
--------------
Array
(
[0] => HR_PersFunUit
[1] => LEFT JOIN
[2] => LEFT JOIN
[3] => HR_Pers
[4] => ON
[5] =>
[6] =>
[7] =>
[8] => ON
[9] => HR_PersFunUit.IDNR = HR_Pers.IDNR
)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 15:00:01 2025 UTC |
I just found out something new (I hope it helps) If I try these 2 lines: $String = "test 12 test 123 test 123 test"; print_r(preg_split("/( 12(3){0,1} )/", $String, -1, PREG_SPLIT_DELIM_CAPTURE)); I get this as result: Array ( [0] => test [1] => 12 [2] => test [3] => 123 [4] => 3 [5] => test [6] => 123 [7] => 3 [8] => test )This is totally bogus, because you are using capturing parentheses. If you change the supplied test cases to (?:) they will work as expected. Lets see test #2: $String = "test 12 test 123 test 123 test"; print_r(preg_split("/( 12(?:3){0,1} )/", $String, -1, PREG_SPLIT_DELIM_CAPTURE)); // note the ?: there outputs: ( [0] => test [1] => 12 [2] => test [3] => 123 [4] => test [5] => 123 [6] => test )