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)\n" +
"    from (select a.*\n" +
"                    from qm_subject_mining a\n" +
"\t Where \n" +
"\t     aND a.orgid = 901\n" +
"                 order by a.subs_level_id, a.usersatisfy, a.callstarttime desc) x\n" +
" WHere And rownum <= 30\n" +
" group by subs_level_id;";
               String wellsql = genWellSQL(badsql);
               System.out.println( "替换前SQL:\n" + badsql);
               System.out.println( "替换后SQL:\n" + 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+?");