Подобрать регулярное выражение

226
27 июня 2018, 05:00

Есть некая строка, содержащая это

function dekorator($func, $agrs = [])
{
    if (dd){
        var_dump("Декоратор");
        $func();
    }
}
if (true)
{
    @dekorator
    function test()
    {
        if (ss){
            var_dump("Войс");
            while(){
                dd
            }
        }
    }
    function dgdg()
    {
        var_dump("ff");
    }
    test();
}

Мне нужно получить следующее:

  • Название функции
  • Параметры функции
  • Тело функции (внутри кавычек {}, касающихся только функции)

Я написал регулярное выражение:

/function?\s+(\w+)*\(([^\)]*)\).*?\{([^\}]+[^\{]+)\}/sim

Но есть одно НО, у последней функции она захватывает не ту кавычку (касающуюся не самой функции)

Сама функция

function dgdg()
{
    var_dump("ff");
}

Лишнее

    test();
}

DEMO: https://regex101.com/r/MTS1pr/1/

Answer 1

Решение:

function\W+([^\)]+)\((.*?)\)\s*(\{((?>[^{}]+|(?3))*)\})
READ ALSO
Как с old request записать данные в js?

Как с old request записать данные в js?

Я создаю инпуты через js апендамиИ при отправке формы если поля не все заполнены я эти апенды через цикл фор прорисовываю опять

241
Отправка post запроса с получением ответа

Отправка post запроса с получением ответа

Мне нужно отправить POST запрос через PHP Без CURLПосле отправки запроса, сервер высылает ответ об ошибке или результат

292
Связать дочерние записи php + mysql

Связать дочерние записи php + mysql

Есть интернет магазинЯ добавляю 2 товара (Б и С) у товара А как рекомендуемые

258