本文介绍一种基于正则表达式断言的精准字符串分割方案,用于在 java 中仅当逗号前存在 `as`(忽略大小写)且后接有效别名时才进行分割,从而正确解析多行 sql 字段定义,避免误切括号内或子查询中的逗号。
在处理动态生成或用户输入的 SQL 片段(如 SELECT 子句中的字段列表)时,常见的需求是将多个字段表达式按逗号分隔为独立项。但标准的 split(“,”) 会错误地切分嵌套函数(如 DATE_TRUNC(‘month’, timestamp))或窗口函数中的逗号,导致语法结构被破坏。
理想行为是:仅当逗号前面紧邻 AS 模式时才执行分割——即该逗号位于字段别名声明之后、下一个字段开始之前。这要求正则表达式具备“向前看”能力,而 Java 的 split() 方法支持使用有限长度的正向先行断言(lookbehind) 来实现此逻辑。
✅ 正确的正则表达式如下:
String[] queryArray = internalQuery.split(
"(?<=\\s{1,99}[aA][sS]\\s{1,99}\\w{1,99})\\s*,\\s*"
);
? 表达式解析:
立即学习“Java免费学习笔记(深入)”;