Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2009, 01:16   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
Восклицание Задача по замене символов в строке

Нужна помощь.
Есть некоторая строка. Как на PHP заменить у всех входящих в нее чисел (имеются в виду именно отдельные числа) десятичные разделители с запятой на точку?
Пример: A1+3,5; B2+b=max(3,7+5,6; 3) -> A1+3.5; B2+b=max(3.7+5.6; 3)

Также, как сделать замену точки с запятой на запятую между всеми аргументами функций MAX и MIN, если они есть в строке? В других местах заменять это не надо.
Пример: 3+MAX(3; 5; 4+A1)+MIN(5;30) -> 3+MAX(3, 5, 4+A1)+MIN(5,30)
motorway вне форума Ответить с цитированием
Старый 17.07.2009, 03:02   #2
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

Код:
  //Замена запятой на точку
  $str="A1+3,5; B2+b=max(3,7+5,6; 3)";
  echo $str;
  for ($i=1; $i<strlen($str)-1; $i++)
    if ($strlen[$i-1]>=0 && $strlen[$i-1]<=9 && $strlen[$i+1]>=0 && $strlen[$i+1]<=9 && $str[$i]==',')
	  $str[$i]='.';
  echo "<br>".$str;
  
  //Замена точки с запятой на запятую
  $str="3+MAX(3; 5; 4+A1)+MIN(5;30)";
  echo "<br>".$str;
  $i=strpos($str,"MAX")+3;
  while ($str[$i]!=')')
    {if ($str[$i]==';')
      $str[$i]=',';
	 $i++; 
	}
  $i=strpos($str,"MIN")+3;
  while ($str[$i]!=')')
    {if ($str[$i]==';')
      $str[$i]=',';
	 $i++; 
	}
  echo "<br>".$str;
A_r_r_a_y вне форума Ответить с цитированием
Старый 17.07.2009, 12:01   #3
Metandrostenalon
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 108
По умолчанию

1
PHP код:
$str 'A1+3,5131; B2+b=max(3,7d1+5,61231231; 3) -> A1+3.5; B2+b=max(3.7+5.6; 3)';

$str preg_replace_callback(
    
'~\d,[\d]+~'
    
create_function(
        
'$matches',
        
'return str_replace(",", ".", $matches[0]);'
    
),
    
$str); 
2
PHP код:
$str '3+MAX(3; 5; 4+A1)+MIN(5;30)';

$str preg_replace_callback(
    
'~(?:max|min)(\([^\)]+\))~i'
    
create_function(
        
'$matches',
        
'return str_replace(";", ",", $matches[0]);'
    
),
    
$str); 
php,javascript

Последний раз редактировалось Metandrostenalon; 17.07.2009 в 12:15.
Metandrostenalon вне форума Ответить с цитированием
Старый 17.07.2009, 16:50   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Спасибо, но заметил, что если внутри максимума или минимума есть еще один, то не заменяет все ;
Код:
$str = '3+MAX(3+MAX(5;2); 5; 4+A1)+MIN(5;30); 2';
3+MAX(3+MAX(5,2); 5; 4+A1)+MIN(5,30); 2

Можно как-то это сделать, чтобы для всех максимумов, даже вложенных?
Более того, если в скобках встречаются еще одни, то замена вообще не выполняется

Также в 1 задаче заменять на точку не нужно, если она находится в квадратных скобках:
x=[20,50] - не нужно

Последний раз редактировалось motorway; 17.07.2009 в 17:40.
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по замене строк motorway PHP 3 06.07.2009 23:58
Удаление символов в строке. papoose Общие вопросы C/C++ 8 03.06.2009 19:22
Преобразование символов в строке ZeroQl Помощь студентам 12 17.02.2009 23:06
Количество символов в строке Ivan357 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2008 17:06
Вывод символов в строке Karl_Karlovi4 БД в Delphi 12 03.06.2008 13:31