java 正則匹配空格字符串 正則表達式截取字符串
需求:從一堆sql中取出某些特定字符串:
比如配置的sql語句為:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
我要拿出所有的以@開頭的作為變量,並且去重,則如下玩:
ps:其中正則匹配空格是 “\s+”
public class Test { public static void main(String[] args) { //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb"; String input = "company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb"; String patternStr = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)"; Pattern pattern = Pattern.compile(patternStr); String[] dataArr = pattern.split(input); Set<String> set = new TreeSet<String>(); for (String str : dataArr) { System.out.println(str); if (str.startsWith("@")) { str = str.replaceAll("@", ""); set.add(str); } } System.out.println(set); }
[aa, bb, cc, cd, pid, ttt]輸出如下:
截圖如下:
后來又優化了一下,既然是找出以@開頭的,那么再換一個正則:
public class Tst { public static void main(String[] args) { //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb"; String input = "company_code = $csc223@cc and project_id = @pid ; update t set a = @aa,b=@cd,c=@cd,ttt=@ttt;update t2 set d=@bb"; String regex = "@\\w+\\s?"; //regex = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); Set<String> set = new TreeSet<String>(); while(matcher.find()){ set.add(matcher.group()); } System.out.println(set); } }
2014年11月26日 16:50:31
2015年 2月10日 23:43:45
落雨
394263788