php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #16786 ereg_replace substitution behaving badly
Submitted: 2002-04-24 05:12 UTC Modified: 2002-05-21 11:41 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: tom at scl dot co dot uk Assigned:
Status: Closed Package: Regexps related
PHP Version: 4.2.0 OS: Linux 2.2.19
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: tom at scl dot co dot uk
New email:
PHP Version: OS:

 

 [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?

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-04-24 06:30 UTC] yohgaki@php.net
Could you paste complete code?

(With complete code, we can test immediately and put the code
to test suite, if it's needed)


 [2002-04-24 07:25 UTC] tom at scl dot co dot uk
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");
?>
 [2002-05-21 11:41 UTC] rasmus@php.net
Seems to be fixed in 4.2.1 and HEAD
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 14:01:32 2024 UTC