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

从含换行/回车的SQL字符串中提取数据库表名的正则问题

问题解决:Perl正则正确提取SQL表名

错误原因分析

原正则/ INTO (\S+?\.\S+?)[\s\n\r()]/gi存在两个核心问题:

  1. 匹配模式\S+?\.\S+?仅能匹配含一个点的表名,但目标表名DWH_CCP.TGT.CCP_ATTR_XREF包含两个点,导致正则无法匹配完整表名,进而持续匹配后续非空白字符。
  2. 循环内部声明的my $table是局部变量,循环结束后外部的$table会因作用域问题无法正确获取匹配结果。

修正后的代码

# 假设$string为存储SQL语句的变量
my $table;
if ($string =~ / INTO (\S+\.\S+)[\s\n\r()]/gi) {
    $table = $1;
}
print "\ntable is $table\n";

正则规则说明

  • \S+\.\S+:匹配包含至少一个点的连续非空白字符,兼容库.模式.表或模式.表格式的表名。
  • [\s\n\r()]:匹配表名后的终止符(空格、换行、回车、括号),确保匹配在表名结束位置停止。
  • 若需支持不带点的单表名,可将正则调整为/ INTO (\w+(?:\.\w+)*)[\s\n\r()]/gi,其中\w+(?:\.\w+)*可匹配由字母数字下划线组成、含任意数量点的表名。

验证结果

用给定SQL语句测试修正后的代码,输出为:

table is DWH_CCP.TGT.CCP_ATTR_XREF

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:17:34