如何使用Java/PCRE正则移除嵌套函数并保留最内层参数
嵌套函数剥离正则解决方案(Java/PCRE兼容)
核心实现逻辑
无需硬编码函数名,通过匹配「函数名+左括号」的嵌套结构,自动剥离外层嵌套,提取最内层参数值,支持自定义匹配前缀适配不同场景。
基础版正则(无内部括号的参数场景)
查找正则
(你的自定义前缀)(?:[\w.]+\s*\()+(.*?)(?:\)\s*)+(?=\))
替换值
$1$2
配置说明
- 将正则中的
你的自定义前缀替换为你需要匹配的目标位置前缀即可,特殊符号需要转义,示例场景的前缀为adjustalpha\(shadowcolor, - 自动适配任意符合
[字母、数字、下划线、.]命名规则的函数名,嵌套层数无限制
示例验证
输入代码
ArrayNew(1) = adjustalpha(shadowcolor, CInt(Math.Truncate (ObjectToNumber (Me.bezierviewshadow.getTag))))
实际使用的查找正则
(adjustalpha\(shadowcolor, )(?:[\w.]+\s*\()+(.*?)(?:\)\s*)+(?=\))
输出结果
ArrayNew(1) = adjustalpha(shadowcolor, Me.bezierviewshadow.getTag)
增强版正则(参数包含内部括号的平衡匹配场景)
如果最内层参数本身包含合法括号(比如calc(1+2*(3+4))),使用支持括号平衡的版本避免截断:
PCRE环境(PHP、Go、Python PyPi regex库等)
(你的自定义前缀)(?:[\w.]+\s*\()+(?<content>(?:[^()]++|\((?&content)\))*+)(?:\)\s*)+(?=\))
替换值为$1$content
Java环境(Java 8及以上)
(你的自定义前缀)(?:[\w.]+\s*\()+(?<content>(?:[^()]++|\((?<content>)\))*+)(?:\)\s*)+(?=\))
替换值为$1${content}
内容的提问来源于stack exchange,提问作者mohsyn
相关产品推荐
相关产品推荐

