正则表达式 - smile0821/learngit GitHub Wiki

^只在元字符[]内表示否 ?!理解成此处后面不能咋咋咋,?!,?=这种理解成断言比较好

  1. 解析sql语句,分号分隔 String[] processSql = sqlSb.toString().split("(;\s*\r\n)|(;\s*\n)");
  2. 去除sql中的注释及多余空格 public static String clearRedundant(String sql) { Pattern spacePattern = Pattern.compile("\s+"); Matcher m = spacePattern.matcher(sql.replaceAll("--.|(/\[\s\S]?\/)", "")); return m.replaceAll(" "); }
  3. 单条sql中获取schema和table组合名 public static String getSchemaTable(String sql) { String diy = "\s+(?i)(into|from|table|schema|on)\s+("?."?\.?"?."?)[^\s]*"; Pattern p = Pattern.compile(diy); Matcher m = p.matcher(sql); if (m.find()) { String schemaTable = m.group(2); if (schemaTable.contains(" ")) { return schemaTable.substring(0, schemaTable.indexOf(" ")); } else { return schemaTable; } } return ""; }
  4. 以.分隔 str.split("\.");
  5. 只能以字母、中文、下划线开头,但不能以pg_开头,pg不区分大小写 !Pattern.matches("^(?i)(?!pg_)[a-z|A-Z|_|\u4e00-\u9fa5].*$", str);
  6. 以字母、数字、下划线、中划线的表名 !Pattern.matches("[\w-|^"*"$]+", tableName);