ID: 10666
Updated by: andrei
Reported By: [EMAIL PROTECTED]
Old-Status: Open
Status: Closed
Bug Type: PCRE related
PHP Version: 4.0.5
Assigned To:
Comments:
$n notation was introduced to be similar to Perl. It is exactly equivalent to \\n.
You can't simply use f($1) in the evaluation string because $1 is replaced with the
matched contents and after replacement it becomes, in your example, f(abc def), which
is not valid PHP code. So you have to use f("$1") or f('$1').
The fact that it backslash-escapes single and double quotes in matches before
substituting $1 is a feature, not a bug, otherwise you'd have a really hard time
figuring out which quotes go where when using evaluation strings.
Previous Comments:
---------------------------------------------------------------------------
[2001-05-04 11:27:54] [EMAIL PROTECTED]
Formerly, preg_replace's "e" modifier inserted extraneous backslashes in
backreferences of "\1" or '\1' form.
Ostensibly, the $1 backreference form was added to fix this. However, the following
code fails:
function f($x) { return 'yo'; }
$s = "xyzabc def123";
$s = preg_replace('/(abc def)/e', 'f($1)', $s, -1);
It seems to be trying to evaluate $1 as code, rather than as a variable containing the
contents "abc def".
This is borne out by the fact that the following succeeds:
$s = preg_replace('/(abc def)/e', 'f("$1")', $s, -1);
But "$1" and '$1' are no better than "\1" and '\1', since it still inserts extraneous
backslashes before single quotes or double quotes (respectively)!!!
I was sincerely hoping that PHP 4.04 and 4.05 would fix this oversight, since my web
application depends on it. I'm keeping my fingers crossed that it's just me doing
something wrong, though I doubt it...
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=10666&edit=2
--
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]