sql 用正则表达式解析 case 结束表达式 preg_match_all

sql parse case end expression with regular expressions preg_match_all

我尝试从 oracle 查询中解析 case-end 表达式的内容。我使用以下正则表达式。

/((?<=case)[\w\s:\=\'\".\,()\<>-]*(?=end)){1}?/gi

sql 部分是: DECODE( SUM( CASE WHEN a.art_ind IN ('NORMAL', 'MVAR') THEN 1 ELSE 0 END ), 0, 1, SUM( CASE WHEN a.art_ind IN ('NORMAL', 'MVAR') THEN 1 ELSE 0 END ) ) )* 100, 2 ) store_av,

但我得到了错误的结果,它得到了 2 个或更多个案例结束块。 请看下面。它需要 2 个案例结束而不是 1 个
有人可以提出解决方案吗?

((?<=case)[\w\s:\=\'\".\,()\<>-]*?(?=end)){1}?

                                ^^

制作您的 * 非 greedy.See 演示。

https://regex101.com/r/mT0iE7/21