Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Замена регулярным выражением
drmorgue  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 38881
На форуме: 2 года, 9 месяцев, 19 дней
Карма:




Добрый день!

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

$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

В чём может быть проблема?
Спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 9 дней
Карма: 552




Для 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);


Это сообщение отредактировал Winston - 11.02.2014 - 16:41
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
drmorgue  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 38881
На форуме: 2 года, 9 месяцев, 19 дней
Карма:




Цитата (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.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса