Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена символов с условиями, неплохой орешек 
:(
    Опции темы
motorway
  Дата 17.7.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



Помогите решить следующую задачу:

Нужно заменить в строке все запятые на точки, которые находятся не внутри квадратных скобок [].
5,6+max(6,5;4,5)+[20,40] -> 5.6+max(6.5;4.5)+[20,40]
 
Также нужно заменить в строке все точки с запятой на запятую, если они находятся внутри круглых скобок ().
То есть если этот символ окружен скобками.

Очень нужно!
PM MAIL   Вверх
solenko
Дата 17.7.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Код

<?php
$str = '5,6+max(6,5;4,5)+[20,40]';
$in_brackets = false;
$len = strlen($str);
for ($i=0;$i<$len;$i++) {
  if ($str[$i] == '[') {
    $in_brackets = true;
  }elseif ($str[$i] == ']') {
     $in_brackets = false;
  }elseif ($str[$i] == ',' && !$in_brackets) {
     $str[$i] = '.';
  }
}
echo $str;



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
p0zt3r
Дата 17.7.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 4.2.2007
Где: Самара

Репутация: 3
Всего: 6



Код

  function replace_commas ( $src )
  {    
  
  function callback1 ( $matches )
    {
        $matches[0]=str_replace(',','.',$matches[0]);
                  
        return $matches[0];
        
    }
    
    function callback2 ( $matches )
    {                     
        $matches[0]=str_replace('.',',',$matches[0]);
                          
        return $matches[0];
    }
               
        $src=str_replace (',','.',$src);
      $src2=preg_replace_callback('/\((.)*\)/',callback1, $src);
      $src3=preg_replace_callback('/\[(.)*\]/',callback2, $src2);
      return $src3;
  }
            
  
  
  $str = "5,6+max(6,5;4,5)+[20,40]";
  
  echo replace_commas ($str);


код не оптимальный, но первое что пришло в голову. 

Это сообщение отредактировал(а) p0zt3r - 17.7.2009, 19:33
--------------------
24*7*365*геморой*зарплата=0
PM MAIL ICQ   Вверх
nerezus
Дата 17.7.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



motorway, стыдно циклы и условия не знать.
solenko, +1. Самое верное решение - самое простое)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
motorway
Дата 17.7.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



А что насчет замены ; на , внутри круглых скобок? 

Вообще я циклы знаю, но здесь громоздкая задача

Это сообщение отредактировал(а) motorway - 17.7.2009, 21:20
PM MAIL   Вверх
ТоляМБА
Дата 17.7.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



motorway, ты код solenko видел, прогонял? Там не сможешь поменять скобки и разделители?
PM   Вверх
motorway
Дата 17.7.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



Да, понял  smile 
PM MAIL   Вверх
motorway
Дата 17.7.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



 что-то странно, в одном месте не исправляет... сейчас смотрю

Это сообщение отредактировал(а) motorway - 17.7.2009, 22:05
PM MAIL   Вверх
motorway
  Дата 17.7.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



Похоже, все работает на данный момент. Спасибо за помощь, господа!  smile 
PM MAIL   Вверх
motorway
Дата 17.7.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: 1
Всего: 0



Нет, все-таки неправильно! Проверьте на MAX((3+2)*5; 30); У меня не заменяет! Ведь должно заменять все внутри самых внешних скобок
PM MAIL   Вверх
ТоляМБА
Дата 18.7.2009, 04:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Код
<?php
$str = 'MAX((3+2)*5; 30)+5,6+max(6,5;4,5)+[20,40] -> 5.6+max(6.5;4.5)+[20,40]';
$a = 0;
$len = strlen($str);
for ($i=0;$i<$len;$i++) 
{
  if ($str[$i] == '(') 
  { $a++;}
    elseif ($str[$i] == ')') 
    {$a--;}
        elseif ($str[$i] == ';' && $a>0) 
        {$str[$i] = ',';}
}
echo $str;
?>

Сорри за оформление кода - давно не песал на php
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.