本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

java 正则匹配空格字符串 正则表达式截取字符串

需求:从一堆sql中取出某些特定字符串:

比如配置的sql语句为:"company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";

我要拿出所有的以@开头的作为变量,并且去重,则如下玩:

ps:其中正则匹配空格是 “\s+”

public class Test {
    public static void main(String[] args) {
        //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
        String input = "company_code = @cc and project_id = @pid ; update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
        String patternStr = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
        Pattern pattern = Pattern.compile(patternStr);
        String[] dataArr = pattern.split(input);
        Set<String> set = new TreeSet<String>();
        for (String str : dataArr) {
            System.out.println(str);
            if (str.startsWith("@")) {
                str = str.replaceAll("@", "");
                set.add(str);
        System.out.println(set);

[aa, bb, cc, cd, pid, ttt]输出如下:

截图如下:

后来又优化了一下,既然是找出以@开头的,那么再换一个正则:

public class Tst {
     public static void main(String[] args) {
            //String input = "update t set a = @aa,b=@bb,c=@cd,ttt=@ttt;update t2 set d=@bb";
            String input = "company_code = $csc223@cc and project_id = @pid ; update t set a = @aa,b=@cd,c=@cd,ttt=@ttt;update t2 set d=@bb";
            String regex = "@\\w+\\s?";
            //regex = "(\\s*=\\s*)|(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
            Pattern pattern = Pattern.compile(regex); 
            Matcher matcher = pattern.matcher(input); 
            Set<String> set = new TreeSet<String>();
            while(matcher.find()){ 
                set.add(matcher.group());
            System.out.println(set);

2014年11月26日 16:50:31

2015年 2月10日  23:43:45

394263788

使用Java面向对象编写网络通信程序应用 Elasticsearch Java API Client 开发 手动部署Java Web环境(Alibaba Cloud Linux 2) 搭建Java Web开发环境(Anolis OS) RocketMQ中使用Java客户端发送消息和消费的应用