linux 转 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+?");0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值