• Java从零开始学三十二(正则表达式)


    一、为什么要有正则

    正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证、拆份、替换功能。
    例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法:
    不使用正则完成
    使用正则完成

    二、Pattern、Matcher类

    如果要想在程序中应用正则表达式则必须依靠Pattern类与Matcher类,这两个类都在java.util.regex包中定义。Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范。
     
    常用正则规则
    No.
    规范
    描述
    No.
    规范
    描述
    1
    \
    表示反斜线()字符
    2
    表示制表符
    3
    表示换行
    4
    [abc]
    字符a、b或c
    5
    [^abc]
    除了a、b、c之外的任意字符
    6
    [a-zA-Z0-9]
    表示由字母、数字组成
    7
    d
    表示数字
    8
    D
    表示非数字
    9
    w
    表示字母、数字、下划线
    10
    W
    表示非字母、数字、下划线
    11
    s
    表示所有空白字符(换行、空格等)
    12
    S
    表示所有非空白字符
    13
    ^
    行的开头
    14
    $
    行的结尾
    15
    .
    匹配除换行符之外的任意字符
     
        数量表示(X表示一组规范)
     
    No.
    规范
    描述
    No.
    规范
    描述
    1
    X
    必须出现一次
    2
    X?
    可以出现0次或1次
    3
    X*
    可以出现0次、1次或多次
    4
    X+
    可以出现1次或多次
    5
    X{n}
    必须出现n次
    6
    X{n,}
    必须出现n次以上
    7
    X{n,m}
    必须出现n~m次
     
    逻辑运算符(X、Y表示一组规范)
     
    No.
    规范
    描述
    No.
    规范
    描述
    1
    XY
    X规范后跟着Y规范
    2
    X | Y
    X规范或Y规范
    3
    (X)
    做为一个捕获组规范
     
    Pattern类的常用方法
    No.
    方法
    类型
    描述
    1
    public static Pattern compile(String regex)
    普通
    指定正则表达式规则
    2
    public Matcher matcher(CharSequence input)
    普通
    返回Matcher类实例
    3
    public String[] split(CharSequence input)
    普通
    字符串拆分
    在Pattern类中如果要想取得Pattern类实例,则必须调用compile()方法。
     
    Matcher类的常用方法
    No.
    方法
    类型
    描述
    1
    public boolean matches()
    普通
    执行验证
    2
    public String replaceAll(String replacement)
    普通
    字符串替换
    如果要验证一个字符串是否符合规范,则可以使用Matcher类
     

    三、正则验证

    3.1、验证字符组成

    package com.pb.demo2;
    
    import java.util.regex.Pattern;
    
    public class RegexDemo1 {
    
        public static void main(String[] args) {
            String str="1234567890"; //声明字符串由数字组成
            //使用正则验证
            if(Pattern.compile("[0-9]+").matcher(str).matches()){
                System.out.println("数字组成。");
            }else{
                System.out.println("不全是由数字组成。");
            }
            
        }
    
    }

     3.2、验证一字符串是否是合法日期格式

     

    package com.pb.demo2;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     * 验证一字符串是否是合法日期格式
     */
    public class RegexDemo2 {
    
        public static void main(String[] args) {
            String str="1983-07-23";
            String pat="\d{4}-\d{1,2}-\d{1,2}";   //定义规则
            Pattern p=Pattern.compile(pat);      //实例化pattern类对象
            Matcher m=p.matcher(str);                 //验证字符串内容是否合法
            //使用正则验证
            if(m.matches()){
                System.out.println("日期格式合法! !");
            }else{
                System.out.println("日期格式不合法! !");
            }
            
            
        }
    
    }

    3.3、按照字符串的数字将字符串拆分

    package com.pb.demo2;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     * 按照字符串的数字将字符串拆分
     */
    public class RegexDemo2 {
    
        public static void main(String[] args) {
        String str="A1B22C333D4444E55555F6G77";
        String pat="\d+";                         //定义拆分的规则
        Pattern p=Pattern.compile(pat); //实例化Pattern类
        String [] ss=p.split(str);                //拆分为字符串数组
                        //遍历
            for (String s : ss) {
                System.out.print(s+"	");
            }
            
        }
    
    }

    结果:

    A    B    C    D    E    F    G    

    3.4、替换操作

    package com.pb.demo2;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     * 按照字符串的数字将字符串替换
     */
    public class RegexDemo4 {
    
        public static void main(String[] args) {
        String str="A1B22C333D4444E55555F6G77";
        String pat="\d+";                         //定义替换的规则
        Pattern p=Pattern.compile(pat); //实例化Pattern类
        Matcher m=p.matcher(str);            //实例化Matcher类
        String newStrirng=m.replaceAll("_");//替换的字符
        System.out.println(newStrirng);
            
        }
    
    }

    结果:

    A_B_C_D_E_F_G_

    3.5、邮箱验证

    package com.pb.demo2;
    
    import java.util.Scanner;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     * 邮箱是否合法
     */
    public class RegexDemo5 {
    
        public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //String pat="^[A-Za-z0-9_]+@[A-Za-z0-9_]+(.[A-Za-z_]{2,3}){1,2}$";
        String regEx="^\w+@\w+(.[A-Za-z_]{2,3}){1,2}$";
        System.out.println("输入邮箱:");
        String email=input.nextLine();
        Pattern p=Pattern.compile(regEx);
        Matcher m=p.matcher(email);
        if(m.matches()){
            System.out.println("邮箱合法!!");
        }else{
            System.out.println("邮箱不合法!!");
        }
            
        }
    
    }

    四、String对正则表达式的支持

    在String类中有以下三个方法是支持正则操作
    No.
    方法
    类型
    描述
    1
    public boolean matches(String regex)
    普通
    字符串匹配
    2
    public String replaceAll(String regex,String replacement)
    普通
    字符串替换
    3
    public String[] split(String regex)
    普通
    字符串拆分
     
  • 相关阅读:
    pktgen使用指南
    常见的网卡调优
    网络PPS测试
    网络性能测试工具qperf
    设置虚拟机静态IP
    superset填坑
    js格式化
    《你不知道的JavaScript》读书笔记(一):JS是如何查找变量的
    技术分享PPT整理(三):网页渲染流程
    技术分享PPT整理(二):C#常用类型与数据结构
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4302380.html
Copyright © 2020-2023  润新知