ID: 39853
User updated by: anton dot kirsanov at gmail dot com
Reported By: anton dot kirsanov at gmail dot com
Status: Open
Bug Type: Strings related
Operating System: Windows XP SP2
PHP Version: 4.4.4
New Comment:
Hi:)
funny...
you will use "/e" modifier if you want parse the pattern as a php code.
Say me, why a function str_repeat() really work in this situation:
<?php
$s = "A-B";
echo preg_replace("/\-([a-z])/iU", str_repeat("$1", 10), $s);
?>
// --------------
// ACTUAL RESULT:
// --------------
ABBBBBBBBBB
Why?
See that:
<?php
$s = "A-B";
echo preg_replace("/\-([a-z])/iU", strtolower(str_repeat("$1", 10)),
$s);
?>
// --------------
// ACTUAL RESULT:
// --------------
ABBBBBBBBBB
// Why that ? :)
Previous Comments:
------------------------------------------------------------------------
[2006-12-16 18:09:15] judas dot iscariote at gmail dot com
Why you think this is a bug ?
you are looking for preg_replace_callback ... or if you are crazy, the
preg_replace "/e" modifier.
not a bug, read the manual ;-)
------------------------------------------------------------------------
[2006-12-16 12:40:44] ara at lenta dot ru
Tu XYu.
------------------------------------------------------------------------
[2006-12-16 12:37:46] anton dot kirsanov at gmail dot com
Sorry, am mix up a 'Expected result' and 'Actual result' :)
Please read this quite the contrary - 'Expected result' is a 'Actual
result'.
------------------------------------------------------------------------
[2006-12-16 12:35:36] ara at lenta dot ru
ты хуй
------------------------------------------------------------------------
[2006-12-16 12:33:44] anton dot kirsanov at gmail dot com
Description:
------------
strtoupper(), strtolower() function does not change
string(as virtual vars - like $1(\\1)) what be returned a preg_replace
function.
Reproduce code:
---------------
<?php
// 1
$s = "A-B";
echo preg_replace("/\-([a-z])/iU", strtolower("$1"), $s);
echo "\n";
// 2
$s = "a-b";
echo preg_replace("/\-([a-z])/iU", strtoupper("$1"), $s);
// 3
$s = "B-B";
echo preg_replace("/([a-z]-[a-z])/i", strtolower("A-$1-A"), $s);
?>
Expected result:
----------------
AB
ab
a-B-B-a
Actual result:
--------------
Ab
aB
abba
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=39853&edit=1