gpt4 book ai didi

java - 用于提取 SQL 查询的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:20 27 4
gpt4 key购买 nike

是否有从字符串中提取 SQL 查询的正则表达式?我有兴趣验证任何 SQL 语法,而只是提取 SQL 命令的选择。这以灵活的方式解析给定的 SQL 文件/字符串。

给出的是以下 SQL 文件/字符串示例:

SELECT
*
FROM
test_table
WHERE
test_row = 'Testing ; semicolon';

SELECT * FROM another_test_table;

INSERT INTO
table_name
VALUES
(value1,'value which contains semicolon ;;;;',value3,...);

一些伪代码示例是:^(UPDATE|SELECT|INSERT INTO)(.*)(;)$。将来我希望使用所有(可能的)命令扩展它。

  • 寻找与以下之一的开始匹配:(UPDATE|SELECT|INSERT|INTO)
  • 零个或多个任何字符(包括空格和换行符)
  • ; 处停止,它分隔了 SQL 查询。

只要可以通过正则表达式实现,以下 java 代码就能够提取所有 SQL 命令:

final String regex = "LOOKING_FOR_THIS_ONE";
final Pattern p = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = p.matcher(content);

while (matcher.find()) {
// matcher.group() now contains the full SQL command
}

提前致谢!

最佳答案

我首先要说这不是一个好方法,并强烈建议您找到另一种方法,最好在声明的地方正确标记它,这样您就不会结束在这种情况下。

也就是说,SQL 要求它以下列之一开始; DELETESELECTWITHUPDATEINSERT INTO。它还要求输入以 ; 结尾。

我们可以使用它来抓取所有与 SQL 匹配的序列:

final String regex = "^(INSERT INTO|UPDATE|SELECT|WITH|DELETE)(?:[^;']|(?:'[^']+'))+;\\s*$";
final Pattern p = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL);

组 1 现在包含操作词,以防您希望在 UPDATESELECT 上过滤有效的 SQL。

查看正在运行的正则表达式,以及此处的警告:

https://regex101.com/r/dt9XTK/2

关于java - 用于提取 SQL 查询的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672539/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com