Regex - SQL statement



它只是一个非常简单的SQL解析过程,否HAVINGORDER BYGROUP BY将在需要解析的语句中,但是有关选择零件中的星号的某些东西不会工作(例如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;"

匹配结果将为true

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

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

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

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

在这种情况下它不起作用

我在那个星号上做错了吗?

必须在 from之前关闭括号

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

您选择table2,但不要从中选择任何东西。如果要进行 *选择,则必须在Table1和Table2之间指定联接。

这是您的问题。

最新更新