Извлеките содержимое выражения агрегации SQL в PHP, используя выражение relugar

Я хочу извлечь содержимое внутри некоторой функции, такой как SUM, AVG, COUNT выражения запроса SQL в PHP. Например, SUM(A+B) -> A+B или SUM(SUM(A)) -> SUM(A) и A.

Я использовал функцию preg_match_all с регулярным выражением следующим образом:

#(SUM|sum|AVG|avg|MIN|min|MAX|max|COUNT|count)\((.*?)\)#

Он очень хорошо работает с одной функцией, такой как SUM(A), но не с многофункциональным случаем SUM(SUM(A)). Результат SUM(SUM(A)) равен SUM(A. Похоже, что preg_match_all распознает только первые ) и пропускает следующие ).

Есть ли способ или какая-либо функция помочь мне извлечь содержимое функции в случае нескольких функций?


person Duy Huynh    schedule 18.12.2018    source источник
comment
уменьшите условный размер вдвое, используя шаблон без учета регистра. Итак, сколько вы изучили рекурсивные шаблоны? Пожалуйста, предложите образец входной строки, который содержит несколько совпадающих подстрок, и укажите точный желаемый результат. Пожалуйста, покажите вашу попытку кодирования.   -  person mickmackusa    schedule 18.12.2018
comment
Используйте /(sum|avg|min|max|count)\((.*)\)/i regex101.com/r/zu1tjU/1.   -  person Mohammad    schedule 18.12.2018
comment
@Mohammad Пожалуйста, никогда не публикуйте решения в комментариях. p.s. в вашем шаблоне нет рекурсии. (пожалуйста, удалите)   -  person mickmackusa    schedule 18.12.2018
comment
Ваш вопрос неясен и неполный. Пожалуйста, улучшите свой вопрос. Поиск на этом сайте: stackoverflow.com/questions/tagged/php+regex+recursion   -  person mickmackusa    schedule 18.12.2018
comment
Спасибо, что напомнили мне об этом. Я новичок в регулярном выражении. Кстати, всем спасибо. Я нашел ответ в ваших комментариях.   -  person Duy Huynh    schedule 18.12.2018
comment
@mickmackusa Я думаю, мне этого достаточно, чтобы найти ответ. Спасибо. Как мне закрыть эту тему?   -  person Duy Huynh    schedule 18.12.2018
comment
Вы можете отозвать свой вопрос.   -  person mickmackusa    schedule 18.12.2018