不区分大小写,换行支持。。。,一个SQL工具要用这个代码。 package com.lavasoft.regtest; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式SQL工具 * * @author leizhimin 2010-5-18 10:34:34 */ public class RegexToolkit { // private static final Pattern p_wellsql = Pattern.compile("\s+?where\s*?and\s+?", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static final Pattern p_wellsql = Pattern.compile("(?i)(?m)\s+?where\s*?and\s+?"); public static String genWellSQL(String badSQL) { Matcher m = p_wellsql.matcher(badSQL); return m.replaceAll(" where "); } public static void main(String[] args) { String badsql = "select x.subs_level_id, count(x.logdataid)
" + " from (select a.*
" + " from qm_subject_mining a
" + " Where
" + " aND a.orgid = 901
" + " order by a.subs_level_id, a.usersatisfy, a.callstarttime desc) x
" + " WHere And rownum <= 30
" + " group by subs_level_id;"; String wellsql = genWellSQL(badsql); System.out.println("替换前SQL:
" + badsql); System.out.println("替换后SQL:
" + wellsql); } } 运行结果: 替换前SQL: select x.subs_level_id, count(x.logdataid) from (select a.* from qm_subject_mining a Where aND a.orgid = 901 order by a.subs_level_id, a.usersatisfy, a.callstarttime desc) x WHere And rownum <= 30 group by subs_level_id; 替换后SQL: select x.subs_level_id, count(x.logdataid) from (select a.* from qm_subject_mining a where a.orgid = 901 order by a.subs_level_id, a.usersatisfy, a.callstarttime desc) x where rownum <= 30 group by subs_level_id; Process finished with exit code 0 注意:一下两行代码是等价的。 private static final Pattern p_wellsql = Pattern.compile("\s+?where\s*?and\s+?", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static final Pattern p_wellsql = Pattern.compile("(?i)(?m)\s+?where\s*?and\s+?");