preg_replace и арифметическое выражение в качестве replacement
Пример как пробовал делать:
Код:
...
$t = "text 3";
$res = preg_replace("/text (.*)/", "$1"+7, $t);
echo $res; // выводит 7
$res = preg_replace("/text (.*)/", "$1+7", $t);
echo $res; // выводит 3+7
...
$t = "text 3";
$res = preg_replace("/text (.*)/", "$1"+7, $t);
echo $res; // выводит 7
$res = preg_replace("/text (.*)/", "$1+7", $t);
echo $res; // выводит 3+7
...
и многие другие варианты..
заранее спасибо
Если числа заранее известны то лучше воспользоваться строковыми функциями..
А если не известны?
попробуй вообще без кавычек
Код:
$res = preg_replace("/text (.*)/", $1+7, $t);
если да, то так оно тем более не работает.
Давно как-то уже делал неччто подобное, да вот только никак не припомню как именно :(
Я уже всё перепробовал, все мануалы перекопал...
Вот и я тоже.. А казалось-бы.. задачо-то тривиальная. я думал это достаточно популярный вопрос.
$test =~ s/text (.*)/$1+7/e
модификатором e в конце. неужели ж в похапе подобного нет?
а вообще, в данном случае юзать паттерн (.*) - плохо.
[highlight=php]
$pattern="/(\d+)/e";
$input = "10 12\n";
$a = preg_replace($pattern,"$0+1",$input);
print $a; // 11 13
[/highlight]
Код:
function replacer($matches) {
return "text ".((int)$matches[1] + 7);
}
$t = "text 3";
$res = preg_replace_callback("/text (\d*)/","replacer", $t);
echo $res; // выводит 10
return "text ".((int)$matches[1] + 7);
}
$t = "text 3";
$res = preg_replace_callback("/text (\d*)/","replacer", $t);
echo $res; // выводит 10
Но вариант выше намного симпатичнее.
Всем спасибо.