Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: получить то что между скобок

Сообщения:  [1-3] 

 
 автор: ntro123   (26.08.2011 в 12:00)   письмо автору
 
   для: cheops   (26.08.2011 в 10:49)
 

я еще слишком глуп для классического решения =( буду делать как умею. Надеюсь разницы во скорости выполнения и того и этого решения не существенны.

  Ответить  
 
 автор: cheops   (26.08.2011 в 10:49)   письмо автору
 
   для: ntro123   (26.08.2011 в 10:33)
 

Если решать задачу при помощи регулярных выражений, то да так и придется поступать. Если решать задачу классическим способом, то придется реализовывать стек выражений или разбить это выражение на дерево с операциями в узлах и значениями в листьях.

  Ответить  
 
 автор: ntro123   (26.08.2011 в 10:33)   письмо автору
 
 

Есть вот такая вот строка
123+sqrt((1+1)*2+123*(3+9)*(1+2))+2*5+(2+6)

Количество открывающих и закрывающих скобок может быть любое кол-во.

Нужно получить то что внутри sqrt т.е. (1+1)*2+123*(3+9)*(1+2) - а там может быть все что угодно (это был только пример).
Т.е. видно что тут не получиться тупо значения от открывающей скобки до закрывающий.

Буду благодарен.

ПС. единственное что приходит на ум это:
$str='200+sqrt(123*(123+1)*(2+5.5)+1*(1+1)*(2+2)*(2+2)*(2+22))*(25+1)';
$se='[^\)]{0,}\)';
while(preg_match("#sqrt(\(".$se.")#U", $str, $eee))
{
    if(substr_count($eee[1], '(')!=substr_count($eee[1], ')'))
    {
        $se.='[^\)]{0,}\)';
        continue;
    }
    print_r($eee);
    exit();
}


Можно ли как-то это реализовать по другому? Более быстрый и рациональный способ.

  Ответить  

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования