gpt4 book ai didi

java - 正则表达式 - SQL 语句

转载 作者:行者123 更新时间:2023-12-01 09:09:00 24 4
gpt4 key购买 nike

这只是一个非常简单的SQL解析过程,需要的语句中不会有HAVINGORDER BYGROUP BY被解析,但在 SELECT 部分中匹配星号的某些操作将不起作用(例如 SELECT * .......)

这是代码部分:

String span="SELECT * FROM table1 t, table2";

span=span.toUpperCase();

System.out.println(span);

// Segments
String column="(\\w+\\s*(\\w+\\s*){0,1})";

String columns=column+"(,\\s*"+column+")*";

String ownerenable="((\\w+\\.){0,1}\\w+\\s*(\\w+\\s*){0,1})";

String ownerenables=ownerenable+"(,\\s*"+ownerenable+")*";

String from="FROM\\s+"+columns;

String condition="(\\w+\\.){0,1}\\w+\\s*(=|<|>|LIKE|IS)\\s*'?(\\w+\\.){0,1}[\\w%]+'?";

String conditions=condition+"(\\s+(AND|OR)\\s*"+condition+"\\s*)*";

String where="(WHERE\\s+"+conditions+"){0,1}";

String pattern = "SELECT\\s+(\\*|" + ownerenables + "\\s+" + from + ")\\s+" + where + "\\s*" + "(;){0,1}";

System.out.println(pattern);
System.out.println(span.matches(pattern));

现在,如果我将跨度设置为类似

"SELECT t.id, product p FROM table1 t, table2 WHERE t.id=10;"

匹配结果为真

==================================

但是如果我将其设置为这样的:

"SELECT * FROM table1 t, table2 WHERE t.id=10;"

(这是我用于选择的星号)

在这种情况下它不起作用

我对那个星号做错了什么吗?

最佳答案

from之前必须关闭括号:

String pattern = "SELECT\\s+(\\*|" + ownerenables + ")\\s+" + from + "\\s+" + where + "\\s*" + "(;){0,1}";

关于java - 正则表达式 - SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039806/

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