|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-04-24 05:12 UTC] tom at scl dot co dot uk
Hi,
I have just downloaded PHP4.0.2 and several pieces of code broke because ereg_replace() seemed to be working incorrectly:
if for example I did the following:
$str = "word1-word2";
$str = ereg_replace("^([^-]*)-(.*)", '\1+\2', $str);
it works as expected, ($str == "word1+word2")
The problem arises if one of the parenthasized subexpression is empty the \x (where x is the number of the subexpression) in the replace string does not get replaced at all, instead of with the empty string eg:
$str = "-word2";
$str = ereg_replace("^([^-]*)-(.*)", '\1+\2', $str);
for this example I'd expect the result to be ($str == "+word2") but instead you get ($str == "\1+word2") because \1 is empty.
I don't believe that this is meant to happen but if it is how are we meant to deal with such a case?
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 18:00:01 2025 UTC |
This code should demonstrate the problem: <?php $str = "word1-word2"; $str = ereg_replace("^([^-]*)-(.*)", '\1+\2', $str); print("1) Result = '$str'\n"); $str = "-word2"; $str = ereg_replace("^([^-]*)-(.*)", '\1+\2', $str); print("2) Result = '$str'\n"); if ($str == "+word2") print ("No Bug Detected\n"); else print("Bug Detected (The result should be '+word2')\n"); ?>