Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск и замена значений, которые находятся внутри {}
Форумы портала PHP.SU » PHP » Регулярные выражения » Поиск и замена значений, которые находятся внутри {}

Страниц (1): [1]
 

1. denisator - 16 Сентября, 2015 - 17:53:47 - перейти к сообщению
Подскажите пожалуйста как такое сделать?
Для автоматического перерасчёта стоимости товара указанного в евро на рубли по курсу ЦБ нужно искать по тексту числовые значения в фигурных скобках (например "{12}") умножать их на определённое число (например "5") и заменять на результат (соответственно "{12}" должно замениться на "60 рублей")
2. andrewkard - 16 Сентября, 2015 - 18:18:21 - перейти к сообщению
denisator
Учитывая что цена в {} будет целым числом:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = "Цена {12}";
  3. preg_match('/{(\d+)}/',$str,$matches);
  4. $rate = 5;
  5. $price = (int)$matches[1] * $rate . ' рублей';
  6. echo str_replace($matches[0],$price,$str);
  7.  
3. denisator - 16 Сентября, 2015 - 18:30:27 - перейти к сообщению
К сожалению если строка выглядит как:
$str = "Цена {12} а тут другая цена {15} и ещё другая цена {100500}";
то правило применяется только к первой цене:
"Цена 60 рублей а тут другая цена {15} и ещё другая цена {100500} "
4. Ts.Saltan - 16 Сентября, 2015 - 19:39:13 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $rate = 100500;
  2. $str = preg_replace_callback('/{(\d+)}/', function($m) use ($rate){
  3.  return $m[0] * $rate;
  4. }, $str);
5. Viper - 16 Сентября, 2015 - 19:46:18 - перейти к сообщению
del
6. denisator - 17 Сентября, 2015 - 10:51:53 - перейти к сообщению
Ts.Saltan пишет:
PHP:
скопировать код в буфер обмена
  1. $rate = 100500;
  2. $str = preg_replace_callback('/{(\d+)}/', function($m) use ($rate){
  3.  return $m[0] * $rate;
  4. }, $str);


Спасибо! Работает. Только не $m[0], а $m[1]

 

Powered by ExBB FM 1.0 RC1