Java正则替换一例

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+?");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值