You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式优化:如何获取INSERT INTO后的第一个目标表名

如何用正则提取INSERT INTO后的第一个表名?

嘿,我明白你的需求了!你原来的正则(?<=INSERT INTO\b).*之所以会匹配到DB.SCHEMA.TABLE VALUES(?,?,?),是因为.*是贪婪匹配,会把INSERT INTO之后直到字符串结尾的所有内容都捞进来。要只拿到紧跟的第一个词(也就是你的表名DB.SCHEMA.TABLE),只需要调整正则,让它匹配到第一个空白字符就停止就行。

这里有两种靠谱的方案:

方案1:用非空白字符匹配(推荐)

直接把.*换成\S+,正则变成:

(?<=INSERT INTO\b)\S+
  • \S+的意思是匹配一个或多个非空白字符,刚好会停在第一个空格(也就是VALUES前面的空格)那里,完美捕获你的表名。

方案2:用非贪婪匹配+正向先行断言

如果你更习惯用断言的写法,也可以改成非贪婪匹配,直到遇到第一个空格:

(?<=INSERT INTO\b).*?(?=\s)
  • .*?是非贪婪匹配,会尽可能少地匹配字符;
  • (?=\s)是正向先行断言,确保接下来的字符是空白字符,这样就会在表名后面的空格处停止匹配。

测试验证

用你的原字符串测试:

var Sql=" INSERT INTO DB.SCHEMA.TABLE VALUES(?,?,?)";
两个正则都会精准匹配到DB.SCHEMA.TABLE,完全符合你的需求!

内容的提问来源于stack exchange,提问作者akshindesnowflake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:57:33