惰性匹配.*?
1、. 匹配任意除换行符“
”外的字符;
2、*表示匹配前一个字符0次或无限次;
3、?表示前边字符的0次或1次重复
4、+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复;
5、 .*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
如:a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。
()
(select(.*?)from)
()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
String rule = "(select(.*?)from)"; Pattern compile = Pattern.compile(rule); Matcher matcher = compile.matcher(sql); while(matcher.find()){ String sqlSelect = matcher.group(0); }
这段代码查找多次出现包含 select from的语句
(,)?(\s)*".*?"(\s)*(,)?
String fieldRule = "(,)?(\s)*".*?"(\s)*(,)?"; Pattern compileField = Pattern.compile(fieldRule); Matcher matcherField = compileField.matcher(sqlSelect); while(matcherField.find()){ String sqlField = matcherField.group(0); }
这段代码查找包含双引号或,空白符之后有双引号的语句