Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

preg_replace и арифметическое выражение в качестве replacement

444
25 августа 2009 года
patison
323 / / 15.03.2007
Необходимо в тексте найти число в определённом месте, прибавить к нему, скажем, 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
...

и многие другие варианты..

заранее спасибо
13
25 августа 2009 года
RussianSpy
3.0K / / 04.07.2006
Если числа заранее известны то лучше воспользоваться строковыми функциями..
444
25 августа 2009 года
patison
323 / / 15.03.2007
А если не известны?
325
25 августа 2009 года
Franky
723 / / 10.08.2005
попробуй вообще без кавычек
444
25 августа 2009 года
patison
323 / / 15.03.2007
Вот так что-ли??? :
 
Код:
$res = preg_replace("/text (.*)/", $1+7, $t);

если да, то так оно тем более не работает.
444
25 августа 2009 года
patison
323 / / 15.03.2007
Проблему которая породила этот вопрос я решил. Решил другим способом. Однако вопрос остаётся актуальным, т.к. хочется всё-таки понять как реализовывать подобные вещи.
Давно как-то уже делал неччто подобное, да вот только никак не припомню как именно :(
325
25 августа 2009 года
Franky
723 / / 10.08.2005
да уж, задал задачку :)
Я уже всё перепробовал, все мануалы перекопал...
444
25 августа 2009 года
patison
323 / / 15.03.2007
Вот и я тоже.. А казалось-бы.. задачо-то тривиальная. я думал это достаточно популярный вопрос.
2
25 августа 2009 года
squirL
5.6K / / 13.08.2003
в perl это делается так:
$test =~ s/text (.*)/$1+7/e
модификатором e в конце. неужели ж в похапе подобного нет?

а вообще, в данном случае юзать паттерн (.*) - плохо.
285
25 августа 2009 года
Romik
479 / / 24.11.2002
есть в похапэ это:
[highlight=php]
$pattern="/(\d+)/e";
$input = "10 12\n";
$a = preg_replace($pattern,"$0+1",$input);
print $a; // 11 13

[/highlight]
244
26 августа 2009 года
UAS
2.0K / / 19.07.2006
Иногда полезно почитать ман..
 
Код:
function replacer($matches) {
    return "text ".((int)$matches[1] + 7);
}

$t = "text 3";
$res = preg_replace_callback("/text (\d*)/","replacer", $t);
echo $res; // выводит 10


Но вариант выше намного симпатичнее.
444
26 августа 2009 года
patison
323 / / 15.03.2007
Хе.. модификатор /e . Странно что в офф документации я это упустил. Пойду перечитаю.
Всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог