Я хочу извлечь содержимое внутри некоторой функции, такой как 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
распознает только первый )
и пропускает другие следующие )
.
Есть ли способ или какая-либо функция помочь мне извлечь содержимое функции в случае нескольких функций?
Используйте /(sum|avg|min|max|count)\((.*)\)/i
regex101.com/r/zu1tjU/1
@Mohammad Пожалуйста, никогда не публикуйте решения в виде комментариев. p.s. в вашем шаблоне нет рекурсии. (пожалуйста, удалите)
Ваш вопрос непонятный и неполный. Пожалуйста, улучшите свой вопрос. Искать на сайте: stackoverflow.com/questions/tagged/php+regex+recursion
Спасибо, что напомнили мне об этом. Я новичок в регулярном выражении. Кстати, всем спасибо. Я нашел ответ в ваших комментариях.
@mickmackusa Думаю, мне этого достаточно, чтобы найти ответ. Спасибо. Как мне закрыть эту тему?
Вы можете отозвать свой вопрос.
сократите условный размер вдвое, используя шаблон без учета регистра. Итак, сколько вы исследовали рекурсивных шаблонов? Предложите образец входной строки, которая содержит несколько «совпадающих» подстрок, и укажите точный желаемый результат. Пожалуйста, покажите вашу попытку кодирования.