本文介绍一种基于正则表达式断言的 java 字符串分割方案,精准匹配“as”关键字后出现的逗号(忽略大小写),避免误切嵌套括号或函数内部的逗号,适用于解析多行 sql select 子句。
在 SQL 查询字符串解析场景中,常需将 SELECT 子句按列定义拆分为独立表达式。但直接使用 split(“,”) 会破坏含逗号的函数调用(如 DATE_TRUNC(‘month’, timestamp))或窗口函数(如 OVER(PARTITION BY a, b ORDER BY c))。理想策略是:仅在 AS 关键字之后、作为列别名分隔符的逗号处切分。
Java 的 String.split() 不支持无限长度的 (?有限长度量词的兼容型正向后查找:
String[] queryArray = internalQuery.split(
"(?<=\\s{1,99}[aA][sS]\\s{1,99}\\w{1,99})\\s*,\\s*");
✅ 正则详解:
- (?
- 1–99 个空白字符(兼容换行、缩进);
- 大小写不敏感的 AS([aA][sS]);
- 再跟 1–99 个空白字符;
- 最后是 1–99 个单词字符(即别名名称,如 month_begin_dt)。
⚠️ 注意事项: