1. 程式人生 > >正則表示式獲取sql語句中的表名

正則表示式獲取sql語句中的表名

一個小的實驗,裡面要獲取基本增刪改查的sql語句對應的表名,以下是在W3schoo基本教程的集中sql型別

SELECT 列名稱(*所有列) FROM 表名稱

SELECT 列名稱 FROM 表名稱 where 條件

INSERT INTO 表名稱 VALUES (值1, 值2,….)

INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

DELETE FROM 表名稱 WHERE 列名稱 = 值

一點要注意,sql語句裡是不區分大小的,先統一轉換成lowcase.

public class MatcherSql {
    public static void main(String[] args) {
        //SELECT 列名稱(*所有列) FROM 表名稱
        //SELECT 列名稱 FROM 表名稱 where 條件
        System.out.println( matchSql( "select * from aaa ") );
        System.out.println( matchSql( "select id,name,password from bbb where id = 1 ") );
        //INSERT INTO 表名稱 VALUES (值1, 值2,....)
//INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) System.out.println( matchSql("insert into ccc valuse(1,'neo','password')") ); System.out.println( matchSql("insert into ddd (id,name,password) valuses(1,'neo','password')") ); //UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
System.out.println( matchSql("update eee set name = 'neo' where id = 1 ") ); //DELETE FROM 表名稱 WHERE 列名稱 = 值 System.out.println( matchSql("delete from fff where id = 1 ") ); String sql = "delete from fff where id = 1 "; String changedSql = changeDelete(sql); System.out.println(changedSql); } /** * @param sql lowcase * @return */ public static String matchSql(String sql){ Matcher matcher = null; //SELECT 列名稱 FROM 表名稱 //SELECT * FROM 表名稱 if( sql.startsWith("select") ){ matcher = Pattern.compile("select\\s.+from\\s(.+)where\\s(.*)").matcher(sql); if(matcher.find()){ return matcher.group(1); } } //INSERT INTO 表名稱 VALUES (值1, 值2,....) //INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) if( sql.startsWith("insert") ){ matcher = Pattern.compile("insert\\sinto\\s(.+)\\(.*\\)\\s.*").matcher(sql); if(matcher.find()){ return matcher.group(1); } } //UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值 if( sql.startsWith("update") ){ matcher = Pattern.compile("update\\s(.+)set\\s.*").matcher(sql); if(matcher.find()){ return matcher.group(1); } } //DELETE FROM 表名稱 WHERE 列名稱 = 值 if( sql.startsWith("delete") ){ matcher = Pattern.compile("delete\\sfrom\\s(.+)where\\s(.*)").matcher(sql); if(matcher.find()){ return matcher.group(1); } } return null; } }

java中的斜槓\是需要轉義的,所以就看到很多的雙斜槓\

非列印字元

這裡寫圖片描述

特殊字元

這裡寫圖片描述
這裡用到了group的概念,被括號()括起來的是一個group,要從當中擷取一個部分的,就將這個部分(),然後匹配group(num),num表示當中的第幾個()。