贝隆

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

惰性匹配.*?

1、. 匹配任意除换行符“\n”外的字符;
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);
}

  

这段代码查找包含双引号或,空白符之后有双引号的语句

 

 
posted on 2021-03-17 14:08  贝隆  阅读(324)  评论(0编辑  收藏  举报