zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式

    正则表达式:正则表达式是一个强大的字符串处理工具(是一个用于匹配字符串的模板),可以对字符串进行查找、提取、分割、替换等操作。

    引入正则表达式

    例:检验QQ号码的合法性

    • 未使用正则表达式
    public class Demo01 {
        public static void main(String[] args) {
            /*校验QQ号码的合法性.
            1:必须是5-12位数字
            2:不能以0开头
            3:必须都是数字*/
    
            String QQ = "10001";
            //长度必须是5-12位
            if (QQ.length() >= 5 && QQ.length() <= 12) {
                //不能以0开头
                if (!QQ.startsWith("0")) {
                    //必须都是数字
                    for (int i = 0; i < QQ.length(); i++) {
                        char ch = QQ.charAt(i);
                        if (!(ch >= '0' && ch <= '9')) {
                            System.out.println("不合法字符:" + ch);
                        }
                    }
                } else {
                    System.out.println("QQ号不能以0开头");
                }
            } else {
                System.out.println("QQ号码长度不正确");
            }
        }
    }
    
    • 使用正则表达式
    public class RegexDemo01 {
        public static void main(String[] args) {
            String QQ="10001";
            String regex="[1-9]\d{4,11}";
            boolean b = QQ.matches(regex);//返回的是一个boolean值
            System.out.println(b);//true
        }
    }
    

    正则表达式的构造摘要

    • 字符类
    字符 说明
    [abc] abc
    [^abc] 任何字符,除了 abc(否定)
    [a-zA-Z] azAZ,两头的字母包括在内(范围)
    [a-d[m-p]] admp[a-dm-p](并集)
    [a-z&&[def]] def(交集)
    [a-z&&[^bc]] az,除了 bc[ad-z](减去)
    [a-z&&[^m-p]] az,而非 mp[a-lq-z](减去)
    • 预定义字符类
    预定义字符 说明
    . 任何字符
    d 数字:[0-9]
    D 非数字: [^0-9]
    s 空白字符:[ x0Bf ]
    S 非空白字符:[^s]
    w 单词字符:[a-zA-Z_0-9](一般用于匹配用户名)
    W 非单词字符:[^w]
    • Greedy 数量词
    Greedy 数量词 说明
    X? X,一次或一次也没有
    X* X,零次或多次(只能含有X或者为空)
    X+ X,一次或多次
    X{n} X,恰好 n
    X{n,} X,至少 n
    X{n,m} X,至少 n 次,但是不超过 m

    PS: 在Java中要多写 (---\b) 表转义

    使用正则表达式

    Pattern类和Matcher类

    Pattern类:Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,。

    Matcher类:Matcher类是一个对字符序列执行各种匹配操作的引擎。Matcher对象是通过调用Pattern对象的方法matcher( )生成的。

    Pattern对象是正则表达式编译后再内存中的表示形式,因此,正则表达式字符串必须先被编译为Pattern对象,在利用该Pattern对象调用matcher()方法创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以共享同一个Pattern对象。

    典型的调用顺序是 :

    //将一个字符串编译成Pattern对象
    Pattern p = Pattern.compile("a*b");
    //使用Pattern对象创建Matcher对象
    Matcher m = p.matcher("aaaaab");
    boolean b = m.matches();//返回true
    

    上面所定义的Pattern对象可以多次重复使用,若某一个正则表达式只需用一次,则可以直接使用Pattern类的静态方法matches()

    boolean b=Pattern.matches("a*b","aaaaab");//返回true
    
    Matcher类常用方法

    find() 返回目标字符串中是否包含与Pattern匹配的子串

    group() 返回与Pattern匹配的子串

    例:提取字符串中所有的字母

    public class MatcherTest {
        public static void main(String[] args) {
            String s="abc,Abc,12]w,?s2a,ab_c,<ab<c";
            Matcher m=Pattern.compile("[a-zA-Z]").matcher(s);
            while(m.find()){
                System.out.print(m.group());
            }
        }
    }
    
    输出结果:abcAbcwsaabcabc
    

    正则表达式的分割方法

    public String[] split(String regex) 返回为字符串数组

    public class Split {
        public static void main(String[] args) {
            String s = "AA-CC-BB-DD-QQ";
            String[] arr = s.split("-");
            for(String str : arr){
                System.out.println(str);
            }
        }
    }
    
    AA
    CC
    BB
    DD
    QQ
    

    PS:如果按"."分割的话,因为"."表示任何字符,所以注意添加转义字符"\."

    正则表达式的替换方法

    public String replaceAll(String regex,String replacement)

    public class ReplaceAll {
        public static void main(String[] args) {
            String s = "I LOVE U";
            //把"U"都改成"YOU"
            s = s.replaceAll("U", "YOU");
            System.out.println(s);
        }
    }
    
    I LOVE YOU
    
  • 相关阅读:
    【缓存】缓存穿透、缓存并发、热点缓存解决方案
    【缓存】redis缓存设计
    【AOP】Spring AOP 和 AspectJ
    disruptor
    Spring Boot application starters
    【日志】log4j2 yml
    PHP中间件--ICE
    docker 简单入门(一)
    redis、memcache和mongodb各自的优缺点是什么
    MYSQL三大范式
  • 原文地址:https://www.cnblogs.com/jascen/p/11185623.html
Copyright © 2011-2022 走看看