JAVA—正则表达式

news2024/12/25 9:02:51

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

目录

1.概述

2.书写规则

3.应用案例

4.用于信息查找

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


1.概述

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

 作用

                                                 1.校验数据是否合法

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

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.应用案例

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

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.用于信息查找

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

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"+"邮箱:2293581974@qq.com\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)按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组

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));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国外高清风景视频素材无水印哪里找?

哪里可以下载国外高清风景视频素材&#xff1f;有哪些高清海外素材网站&#xff1f;作为一名从业多年的视频剪辑师&#xff0c;今天就来给大家揭秘可以下载国外高清风景视频素材的网站&#xff0c;赶紧进来看看吧&#xff5e; 1. 稻虎网 稻虎网作为国内外知名视频素材网站&a…

【机器学习】 Sigmoid函数:机器学习中的关键激活函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Sigmoid函数&#xff1a;机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…

C++day04

1】思维导图 2】完成关系运算符重载&#xff0c;实现成员函数和全局函数的版本。 #include <iostream>using namespace std;class Stu { friend bool operator<(const Stu &L,const Stu &R); private:int age;int id; public:Stu(){}Stu(int age,int id):age…

OD工具-18个实操工具共创会

一、什么是共创会1.1 什么是共创共创&#xff0c;共同创造词组的缩写&#xff0c;字面上来看就是团队为了多个个体一起把以前没有的事物给产生出或者造出来&#xff0c;这明显的是一种典型的人类自主行为。 托德老师有一段描述:共创是一种工作状态&#xff0c;让团队中的每个个…

【时时三省】(C语言基础)操作符3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 &取地址操作符 示例: 每个内存单元都有自己的编号 编号就成为内存单元的地址&a就是找出a的地址 后面可以加一个int *pa&#xff1d;&a 是可以用来存放地址 pa是用来存放地址的…

SQL进阶技巧:有序数据合并问题之如何按照指定的规则对数据进行合并?【详解collect_list函数有序性保证】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…

电脑管家软件搬运导致edge、chrome浏览器不可用

最新版本的腾讯电脑管家可以直接搬运软件到其他路径&#xff0c;但是搬运浏览器会造成软件问题&#xff0c;不建议搬运。 浏览器恢复到原路径&#xff0c;可以解决浏览器不可用的问题&#xff1a; 首先到达你的搬运路径下 可以看到软件文件夹&#xff0c;比如Microsoft Edge或…

C++11——包装器和绑定

1.包装器 C中有一些可调用对象&#xff0c;比如 函数指针&#xff0c;仿函数对象 lambda等等&#xff0c;但是他们又有缺点 因此就引出了包装器的概念 包装器 function的头文件是<functional> 我们可以用包装器包装函数指针&#xff0c;仿函数&#xff0c;lambda int …

关于LLC知识5

RLC的增益曲线不知一条 频率升高&#xff0c;增益会越来越低 无论在容性区还是感性区&#xff0c;当负载加重的时候&#xff0c;R阻值会变小&#xff0c;所以R的分压也会变小&#xff0c;导致增益会变低 当负载突然加重&#xff0c;输出电压会变低&#xff0c;增益曲线由红色变…

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…

c++ - c++11(1)

文章目录 前言一、统一的列表初始化1、使用{ }初始化2、 std::initializer_list 二、声明1、auto2、decltype3、nullptr 三、范围for循环四、右值引用1、左值引用和右值引用2、左值引用和右值引用的比较3、左值引用的使用场景4、右值引用的使用场景5、完美转发 前言 一、统一的…

在百度飞浆中搭建pytorch环境

文章目录 1 先检查创建的环境2 创建虚拟环境3 最终结果 1 先检查创建的环境 选择GPU版本 检查python版本 2 创建虚拟环境 虚拟环境的创建 python3 -m venv env_name # (python3 -m 路径 环境名)激活虚拟环境 source env_name/bin/activate这里注意&#xff0c;同名文件…

MySQL的InnoDB的页里面存了些什么

文章目录 创建新表页的信息新增一条数据根据页号找数据信息脚本代码py_innodb_page_info根据地址计算页号根据页号计算起始地址 主要介绍数据页里面有哪些内容&#xff0c;一行数据在文件里面是怎么组织的 创建新表页的信息 CREATE TABLE test8 (id bigint(20) NOT NULL AUTO…

Android开发-使用FFmpeg-Android进行音视频处理

使用 FFmpeg-Android 进行音视频处理 1. 前言2. FFmpeg-Android 简介3. 功能介绍及实现3.1. 视频字幕添加Kotlin 代码示例&#xff1a;3.2. 尺寸剪切Kotlin 代码示例&#xff1a;3.3. 添加或去除水印Kotlin 代码示例&#xff1a;3.4. 时长截取Kotlin 代码示例&#xff1a;3.5. …

【十万个为什么】强磁场环境用什么编码器好?磁编为什么不怕强磁场?磁编与光编哪一个抗干扰强?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、案例场景1&#xff1a;场景2&#xff1a; 二、为什么磁编可以在磁场中工作三、磁编为什么不怕强磁场&#xf…

LVS实战项目

LVS简介 LVS:Linux Virtual Server&#xff0c;负载调度器&#xff0c;内核集成&#xff0c;章文嵩&#xff0c;阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现。 LVS集群的类型 lvs-nat &#xff1a; 修改请求报文的目标IP, 多目标 IP 的 DNAT lvs-dr &#xff…

vpp编译安装(Ubuntu 16.04)

1、编译 git clone -b stable/1801 https://github.com/FDio/vpp.git cd vpp ./extras/vagrant/build.sh && make 报错 解决&#xff1a; 操作系统是Ubuntu 18.04.5 换成ubuntu 16即可

step11:打包qml程序

文章目录 0.文章介绍1.增加环境变量2.复制RDU.exe3.找到Qt安装路径4.操作qt 6.4.3&#xff08;minGW&#xff09;命令框 0.文章介绍 1.增加环境变量 电脑里安装了两个版本的QT&#xff0c;最好把现在打包的QT版本环境变量移到最前面 添加完成环境变量之后&#xff0c;再在wi…

力扣高频SQL 50题(基础版)第四十一题之1517.查找拥有有效邮箱的用户

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第四十一题1517.查找拥有有效邮箱的用户题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第四十一题 1517.查找拥有有效邮箱的用户 题目说明 表: Users -----------…

c++语言学习,isalnum()函数分析

1&#xff1a;isalnum() 函数说明&#xff1a; 检查参数c,是否为英文字母或阿拉伯数字 2&#xff1a;函数原型&#xff1a; int isalnum(int c) 3&#xff1a;函数参数&#xff1a; 参数c&#xff0c;为检测字符 4&#xff1a;返回值&#xff1a; 若参数c为字母或数字&#…