ID: 10668
User Update by: [EMAIL PROTECTED]
Status: Analyzed
Bug Type: PCRE related
Description: preg_replace backquote failure

H'm...  I'm confused. :-)  To complicate things further, the e-mails display half as 
many backslashes as the web page. :-)  Since I'm not sure what you mean, I'll 
exhaustively list the behaviors:

The following:

  $str = "abc'\\\\''def";
  function f($s) { var_dump($s); return "x"; }
  print preg_replace("/c(.*)d/e", "f('\\1')", $str);

gives the error messages I posted earlier.  (That's two backslashes before the 1.)

The following:

  $str = "abc'\\\\''def";
  function f($s) { var_dump($s); return "x"; }
  print preg_replace("/c(.*)d/e", "f('\\\\1')", $str);

gives the result:

  string(2) "\1" abxef

which isn't what I want.  (That's four backslashes before the 1.)

Prefixing the "1" with one or three backslashes in each case emits an ASCII x'01'.

None of which are what I want to occur...



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

[2001-05-04 15:17:51] [EMAIL PROTECTED]
Oops, \1 instead of 1.

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

[2001-05-04 15:17:15] [EMAIL PROTECTED]
Ok, I made a little mistake, use "f('\\1')" rather than "f('1')".

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

[2001-05-04 13:59:27] [EMAIL PROTECTED]
Oddly, I get the following error:

  Warning: Unexpected character in input: '' (ASCII=92) state=1 in 
/home/groups/t/ta/tavi/htdocs/playground/test.php(4) : regexp code on line 1

  Parse error: parse error in /home/groups/t/ta/tavi/htdocs/playground/test.php(4) : 
regexp code on line 1

  Fatal error: Failed evaluating code: f(''\\''') in 
/home/groups/t/ta/tavi/htdocs/playground/test.php on line 4

PHP compile options may be seen at:

  http://tavi.sourceforge.net/playground/phpinfo.php


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

[2001-05-04 12:58:12] [EMAIL PROTECTED]
Can you explain why you think it fails? The following sample (slightly modified from 
yours to dump the $s parameter to function):

$str = "abc'\\''def";
function f($s) { var_dump($s); return "x"; }
print preg_replace("/c(.*)d/e", "f('\1')", $str);

outputs:

string(5) "'\''"
abxef

As it should.

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

[2001-05-04 11:44:19] [EMAIL PROTECTED]
The following code succeeds on PHP 4.03 and PHP 4.04pl1, but fails on PHP 4.05:

  $str = "abc'\\''def";
  function f($s) { return "x"; }
  print preg_replace("/c(.*)d/e", "f('\1')", $str, -1);

This seems to expose *two* underlying bugs:

  1) There appears to be some problem in the regex state
     machine
  2) There is a definite problem with the replacement of
     the backreference with its corresponding string.


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

The remainder of the comments for this report are too long.  To view the rest of the 
comments, please view the bug report online.

Full Bug description available at: http://bugs.php.net/?id=10668


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to