[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Замена регулярным выражением
drmorgue
Добрый день!

Пытаюсь в строке заменить все целые числа дробными.

$str = "(192-10)*P+20.92-9*(P+Q*5.91)+8923-39+P+1";
echo "IN :$str\n";
$str = preg_replace('/([^.]|^)(\d+)([^.]|$)/', '$1$2.0$3', $str);
echo "OUT:$str\n";


В результате выдаёт:
IN :(192-10)*P+20.92-9*(P+Q*5.91)+8923-39+P+1
OUT:(192.0-10.0)*P+2.00.92.0-9*(P+Q*5.91.0)+8923.0-39.0+P+1.0


А должно выдать:
(192.0-10.0)*P+20.92-9*(P+Q*5.91)+8923.0-39.0+P+1.0

В чём может быть проблема?
Спасибо.
Winston
Для PHP >= 5.3
$str = preg_replace_callback('/([\d.]+)/', function($match){
return strpos($match[1], '.') === false ? $match[1] . '.0' : $match[1];
}, $str);


Или так еще
$str = preg_replace('/([\d.]+)/e', 'strpos($1, ".") === false ? $1 . ".0" : $1;', $str);
drmorgue
Цитата (Winston @ 11.02.2014 - 16:35)
Для PHP >= 5.3
$str = preg_replace_callback('/([\d.]+)/', function($match){
return strpos($match[1], '.') === false ? $match[1] . '.0' : $match[1];
}, $str);


Или так еще
$str = preg_replace('/([\d.]+)/e', 'strpos(, ".") === false ?  . ".0" : ;', $str);

БОЛЬШОЕ СПАСИБО!!!
Второй вариант не потребовал установки новой версии php.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.