这只是一个非常简单的SQL解析过程,需要的语句中不会有HAVING
、ORDER BY
或GROUP 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/