JAVA—正则表达式

关于正则表达式的了解学习,以及用于校验格式,信息查找和替换分割内容。

目录

1.概述

2.书写规则

3.应用案例

4.用于信息查找

5.用于搜索替换,分割内容


1.概述

由一些特定的字符组成,代表一个规则
作用:

1.校验数据是否合法

2.在一段文本中查找满足要求的内容

java 复制代码
package regax;

public class Text1 {
    public static void main(String[] args) {
        //目标:体验使用正则表达式
        //需求:校验QQ号码是否正确,要求全是数字,长度在(6-20)之间,不能以0开头

        System.out.println(checkQQ(null));
        System.out.println(checkQQ("1234655"));
        System.out.println(checkQQ("4654a65"));
        System.out.println("___________________________________");

        System.out.println(checkQQ1(null));
        System.out.println(checkQQ1("1234655"));
        System.out.println(checkQQ1("4654a65"));
        System.out.println("___________________________________");

    }
    public static boolean checkQQ1(String qq){
        return qq != null && qq.matches("[1-9]\\d{5,19}");
    }

    public static boolean checkQQ(String qq){
        //判断是否为null
        if(qq == null || qq.startsWith("0")||qq.length()<6||qq.length()>20){return false;}

        //判断是否都是数字
        for (int i = 0; i < qq.length(); i++) {
            //根据索引获取对应数据
            char ch = qq.charAt(i);
            //判断ch的字符
            if(ch<'0'||ch>'9'){return false;}
        }
        return true;
    }
}

相比常规的方法,正则表达式更加简洁方便


2.书写规则

String提供的匹配正则表达式的方法

public boolean matches(String regex) 判断字符串是否匹配,匹配返回true,反之返回false
字符类

abc\] 只能是abc \[\^abc\] 除了zbc外的字符 \[a-zA-Z\] a到z A到Z (包括的范围) \[a-d\[m-p\]\] a到d或者m-p \[a-z\&\&\[def\]\] d,e,f(交集) \[a-z\&\&\[\^bc\]\] a到z,除了b和c \[a-z\&\&\[\^m-p\]\] a到z,除了m到p "匹配内容 (匹配内容)" 预定义字符集 . 匹配任意字符 \\d 匹配数字,等价于 \[0-9\]。 \\D 匹配非数字,等价于 \[\^0-9\]。 \\w 匹配单词字符,包括字母、数字和下划线,等价于 \[a-zA-Z0-9_\]。 \\W 匹配非单词字符,等价于 \[\^a-zA-Z0-9_\]。 \\s 匹配空白字符,包括空格、制表符和换行符等,等价于 \[ \\f\\r\\n\\t\\v\]。 \\S 匹配非空白字符,等价于 \[\^ \\f\\r\\n\\t\\v\]。 数量词 (判断出现次数) X ? 表示 0 或 1 次匹配。 X \* 表示 0 或多次匹配。 X+ 表示 1 或多次匹配。 X{n} 表示精确匹配 n 次。 X{n,} 表示至少匹配 n 次。 X {n,m} 表示至少匹配 n 次,最多匹配 m 次。 元字符: \^ 匹配输入字行首。 $ 匹配输入行尾。 \\ 将下一个字符标记为特殊字符或转义字符。 模式修正符 i 表示忽略大小写。 m 表示多行匹配。 s 表示单行匹配


3.应用案例

需求:校验用户输入的电话,邮箱,时间是否合法

java 复制代码
package regax;

import java.util.Scanner;

public class Text2 {
    public static void main(String[] args) {
        //checkTel();
        checkTime();
    }

    public static void checkTel(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入电话号码|座机");
            String phone = sc.next();
            if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?)[1-9]\\d{4,19}")){
                System.out.println("您输入的格式正确");
                break;
            }
            else{
                System.out.println("您输入的号码格式不正确");
            }
        }
    }

    public static void checkEmail(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入邮箱");
            String email = sc.next();
            if(email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){
                System.out.println("您输入的格式正确");
                break;
            }
            else{
                System.out.println("您输入的邮箱格式不正确");
            }
        }
    }

    public static void checkTime(){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入时间");
            String time = sc.next();
            if(time.matches("1?[0-9]:[0-6][0-9]|2?[0-4]:[0-6][0-9]|[0-9]:[0-6][0-9]")){
                System.out.println("您输入的格式正确");
                break;
            }
            else{
                System.out.println("您输入的时间格式不正确");
            }
        }
    }
}

4.用于信息查找

需求:把文本中的电话,邮箱,座机号码,热线都爬取出来

java 复制代码
package regax;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Text3 {
    public static void main(String[] args) {
        String data = "java学习\n"+"电话:18703442157\n"+"邮箱:[email protected]\n";

        //定义爬取规则(正则表达式)
        String regex = "(1[3-9]\\d{9})|(\\w{1,}@\\w{2,10})(\\.\\w{2,10}){1,2}|(0\\d{2,5}-?\\d{5,15})";
        //2.把 爬取规则封装成一个pattern对象
        Pattern pattern = Pattern.compile(regex);
        //3.通过pattern对象得到查找内容的匹配器
        Matcher matcher = pattern.matcher(data);
        //4.通过匹配器开始去内容中查找信息
        while(matcher.find()){
            System.out.println(matcher.group());
        }
    }
}

5.用于搜索替换,分割内容

实现功能需要结合以下的方法

|------------------------------------------------------|-------------------------------|
| 方法名 | 说明 |
| public String replaceAll(String regex,String newStr) | 按照正则表达式匹配的内容进行替换 |
| public String[ ] split (String regex) | 按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组 |

java 复制代码
package regax;

import java.util.Arrays;

public class Text4 {
    public static void main(String[] args) {
        //1.内容替换
        //需求 将非中文字符成-
        String s1 = "陈平安hsgjel宁姚gjoass阮秀lfh";
        System.out.println(s1.replaceAll("\\w+", "-"));

        //需求 删除重复字符
        String s2 = "我我我喜欢编编编编编编编编编编编编程";
        /*
        * (.)  一组,匹配任意字符
        * \\1  为这个组声明一个组好 1号
        * +    声明必须是重复字
        * $1   去访问到第一组代表的那个重复的字
        * */
        System.out.println(s2.replaceAll("(.)\\1+", "$1"));

        //需求 获取人名
        String s3 = s1;
        String[] name = s3.split("\\w+");
        System.out.println(Arrays.toString(name));
    }
}

相关推荐
zyq~39 分钟前
【论文阅读笔记】模型的相似性
论文阅读·笔记
caihuayuan440 分钟前
Redis奇幻之旅(三)1.redis客户端与服务端
java·大数据·sql·spring·课程设计
chxin140161 小时前
PyTorch - Tensor 学习笔记
pytorch·笔记
匆匆整棹还2 小时前
关于tomcat乱码和idea中控制台乱码的问题
java·tomcat·intellij-idea
何似在人间5752 小时前
SpringAI+DeepSeek大模型应用开发——1 AI概述
java·人工智能·spring·springai
christine-rr2 小时前
【25软考网工笔记】第二章 数据通信基础(2) 信道延迟计算
网络·笔记·网络工程师·软考
匹马夕阳2 小时前
Java开发中的设计模式之观察者模式详细讲解
java·观察者模式·设计模式
风铃儿~3 小时前
Java微服务注册中心深度解析:环境隔离、分级模型与Eureka/Nacos对比
java·分布式·微服务·面试
赤橙红的黄3 小时前
Spring Boot中接入DeepSeek的流式输出
java·服务器·javascript
小样vvv3 小时前
【AI】IDEA 集成 AI 工具的背景与意义
java·人工智能·intellij-idea