正则表达式-阿里云Java高级编程学习笔记

正则表达式

常用正则标记(背下来)

  1. 【数量:单个】字符匹配:
    • 任意字符:表示由任意字符组成
    • \\:匹配“\”;
    • \n:匹配换行;
    • \t:匹配制表符;
  2. 【数量:单个】字符集(可以从里面任选一个字符):
    • [abc]:表示可能是字母a、b、c中的任意一个;
    • [^abc]:表示不是由字母a、b、c中的任意一个组成;
    • [a-zA-Z]:表示由一个任意字母所组成,不区分大小写;
    • [0-9]:表示由一位数字组成;
  3. 【数量:单个】简化字符集:
    • .:表示任意的一个字符;
    • \d:等价于“[0-9]”范围;
    • \D:等价于[ ^0-9]范围;
    • \s:匹配任意的一位空格,可能是空格、换行、制表符;
    • \S:匹配任意的非空格数据;
    • \w:匹配字母、数字、下划线,等价于[a-zA-Z_0-9];
    • \W:匹配任意的非字母、数字、下划线,等价于[ ^a-zA-Z_0-9];
  4. 边界匹配:
    • ^:匹配边界开始;
    • $:匹配边界结束;
  5. 数量表示,默认情况下只有添加上了数量单位CIA可以匹配多位字符:
    • 表达式?:该正则可以出现0次或1次;
    • 表达式*:该正则可以出现0次、1次或多次;
    • 表达式+:该正则可以出现1次或多次
    • 表达式{n}:表达式的长度正好为n次
    • 表达式{n,}:表达式的长度为n次以上;
    • 表达式{n, m};表达式的长度在n~m次;
  6. 逻辑表达式:可以连接多个正则:
    • 表达式X表达式Y:X表达式之后紧跟上Y表达式;
    • 表达式X|表达式Y:有一个表达式满足即可;
    • (表达式):为表达式设置一个整体描述,可以为整体描述设置数量单位;

String类对正则的支持

  • 在进行正则表达式大部分处理的情况下都会基于String类来完成,String类里面提供以下方法:

    No方法名称类型描述
    01public boolean matches(String regex)普通将制定字符串进行正则判断
    02public String replaceAll(String regex, String replacement)普通替换全部
    03public String replaceFirst(String regex, String replacement)普通替换首个
    04public String[] split(String regex)普通正则拆分
    05public String[] split(String regex, int limit)普通正则拆分
  • 实现字符串替换(将所有小写的字母a换成大写的字母A)

    public class RegexDemo {
    
        public static void main(String[] args) {
            String str = "zazBzisialqalzjudua";
            String regex = "[a]+";
            System.out.println(str.replaceAll(regex, "A"));
        }
    
    }
    
  • 实现字符串的拆分

    public class RegexDemo {
    
        public static void main(String[] args) {
            String str = "z11h22o333u4444h55555a66666i77777l88888i99999n";
            String regex = "\\d+";
            String result[] = str.split(regex);
            for (int i = 0; i < result.length; i++) {
                System.out.print(result[i] + "、");
            }
        }
    
    }
    
    // 运行结果
    z、h、o、u、h、a、i、l、i、n、
    
  • 判断一个数据是否为小数,如果是小数则将其变为double类型

    public class RegexDemo {
    
        public static void main(String[] args) {
            String str = "59.1";
            String regex = "\\d+(\\.\\d+)?";
            System.out.println(str.matches(regex));
        }
    
    }
    
  • 判断一个字符串是否有日期所组成,如果是由日期所组成则将其转为Date类型

    public class RegexDemo {
    
        public static void main(String[] args) throws Exception {
            String str = "2000-08-09";
            String regex = "\\d{4}-\\d{2}-\\d{2}";
            if (str.matches(regex)) {
                System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
            }
        }
    
    }
    
    • 正则只能判断格式,不能判断数据的具体含义
  • 验证email格式

    • email的用户名可以由字母、数字、下划线所组成;

    • email的域名可以由字母、数字、下划线、“-”所组成;

    • 域名的后缀必须是:.cn、.com、.net、.com.cn、.gov

      public class RegexDemo {
      
          public static void main(String[] args) throws Exception {
              String str = "hailin@aliyun.com";
              String regex = "[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|gov)";
              System.out.println(str.matches(regex));
          }
      
      }
      

java.util.regex正则处理类

  • 在这个包里面一共定义两个类:Pattern(正则表达式编译)、Matcher(匹配)

    1. Pattern类提供正则表达式的编译处理支持:

      public static Pattern compile(String regex);
      
    2. 同时Pattern类提供字符串的拆分操作:

      public String[] split(CharSequence input);
      
      // 字符串拆分例子
      public class RegexDemo {
      
          public static void main(String[] args) throws Exception {
              String str = "hail!@#$in@aliyun.cs238423%#@%om";
              String regex = "[^a-zA-Z]+";
              Pattern pattern = Pattern.compile(regex);
              String[] result = pattern.split(str);
              for (int i = 0; i < result.length; i++) {
                  System.out.print(result[i]);
              }
          }
      
      }
      
    3. Matcher类实现了正则匹配的处理类,这个类的对象实例化依靠Pattern类完成

      // Pattern类提供的方法
      public Matcher matcher(CharSequence input);
      

      当获取了Matcher类的对象之后就可以利用该类的方法进行如下操作:

      // 正则匹配
      public boolean matches();
      
      // 字符串替换
      public String replaceAll(String replacement);
      
    4. 字符串匹配

      public class RegexDemo {
      
          public static void main(String[] args) throws Exception {
              String str = "123";
              String regex = "\\d+";
              Pattern pattern = Pattern.compile(regex);
              Matcher matcher = pattern.matcher(str);
              System.out.println(matcher.matches());
          }
      
      }
      

      在上述例子中,String类就可以全部完成,用不到regex包提供的类

    5. 取出“#{内容}”标记中的所有内容

      // String类中所不具备的功能
      public class RegexDemo {
      
          public static void main(String[] args) throws Exception {
              String str = "INSERT INTO student(stuno, name, age) VALUES(#{stuno}, #{name}, #{age})";
              String regex = "#\\{\\w+\\}";
              Pattern pattern = Pattern.compile(regex);
              Matcher matcher = pattern.matcher(str);
              while (matcher.find()) {    // 是否有匹配成功的内容
                  System.out.println(matcher.group(0).replaceAll("#|\\{|\\}", ""));
              }
          }
      
      }
      

      java.util.regex开发包适用于一些复杂的正则处理,String类中所提供的功能只适合于正则的基本操作,而验证是正则基本操作中最重要的部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值