Welcome 微信登录

首页 / 操作系统 / Linux / Java正则替换一例

不区分大小写,换行支持。。。,一个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+?");