За последние 24 часа нас посетили 20535 программистов и 1008 роботов. Сейчас ищут 382 программиста ...

Вложенные скобки

Тема в разделе "Регулярные выражения", создана пользователем ulenvaeeka, 22 июл 2020.

Метки:
  1. ulenvaeeka

    ulenvaeeka Активный пользователь

    С нами с:
    5 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Помогите с проблемой, имеется регулярка
    preg_match_all('#calc\s*\(\s*(.*?)\s*\)\s*#im', $value, $matches);
    она вытягивает значения внутри всех функций calc() в тексте, все работает хорошо, пока в функции не появляются вложенные выражения со скобочками, например, calc((1+2)*5/100), регулярка обрезает последнюю скобку.

    Гуглеж привел к рекурсивному шаблону
    preg_match_all('/\(((?>[^()]+)|(?R))*\)/', $value, $matches);

    Но у меня не получается выделить только значения внутри функций calc, он вытягивает значения всех скобочек.
    То есть такой текст:
    $value = "calc( ( 17000 - 3000)*5/100) sdfgsdfasdf calc((17000-3000)*5/100) asdfsadf (100000*10)";
    возвращает три результата, а должен только два calc()
     
  2. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    ulenvaeeka нравится это.
  3. ulenvaeeka

    ulenvaeeka Активный пользователь

    С нами с:
    5 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Вы маэстро) Спасибо