java - 正则表达式 - SQL 语句

标签 java regex

这只是一个非常简单的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/

相关文章:

java - 无法与远程设备进行蓝牙连接。安卓6.0

java - 通过 Google App Engine servlet 上传 ZIP,并将内容保存到 Cloud Storage (Java)

java 图像无法正确加载 Windows 10

java - Xss 过滤器正则表达式捕获错误的单词

python - 使用 if-then-else 条件和 Python 正则表达式替换

javascript - 正则表达式需要将字符串拆分为 "."

java - Webview中如何保存用户名和密码

java - JDBC executeBatch() 在 PostgreSQL 中无错误地挂起

php - 使用正则表达式验证 Yii 中的十进制数字

regex - python3中 `regs`中 `match`对象的 `re`属性的替代