重学java 72.正则表达式

news2024/12/25 11:09:11

人长大之后就在频繁地离别,相聚反而时日无多

                                                                —— 24.6.17

一、正则表达式的概念及演示

1.概述

        正则表达式是一个具有特殊规则的字符串

2.作用:校验  

3.String中有一个校验正则的方法:

        boolean matches(String regex) —— 校验字符串是否符合指定的regex的规则

4.案例:

        校验QQ号(不能以0开头,必须都是数字,必须是5-15位的)

package S104Regex;

import java.util.Scanner;

public class Demo293Regex {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String data = sc.next();
        boolean b = method01(data);
        System.out.println("result: " + b);

        String data1 = sc.next();
        boolean c = method02(data1);
        System.out.println("result: " + c);
    }

    private static boolean method02(String data) {
        // 1-9数字开头、都是数字0-9,出现4到14次
        boolean result = data.matches("[1-9][0-9]{4,14}");
        return result;
    }

    private static boolean method01(String data) {
        // 不能是0开头的 startsWith开头第一个元素
        if (data.startsWith("0")){
            return false;
        }

        // 必须都是数字
        char[] chars = data.toCharArray();
        for (char aChar : chars) {
            if(aChar<'0' || aChar>'9'){
                return false;
            }
        }
        // 必须是5-15位
        if(data.length()<5 || data.length()>15){
            return false;
        }
        // 以上条件都不满足就返回true
        return true;
    }
}

二、正则表达式的具体使用

1.正则表达式—字符类

        java.util.regex.Pattern:正则表达式的编译表示形式。

        正则表达式-字符类:[]表示一个区间,范围可以自己定义

        语法示例:

                1.[abc]:代表a或者b,或者c字符中的一个。        

                2.[^abc]:代表除a,b,c以外的任何字符。

                3.[a-z]:代表a-z的所有小写字符中的一个。

                4.[A-Z]:代表A-Z的所有大写字符中的一个。

                5.[0-9]:代表0-9之间的某一个数字字符

                6.[a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符

                7.[a-dm-p]:a到d或m到 p之间的任意一个字符

        示例:

import java.util.Scanner;

public class Demo294Regex02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String next = sc.next();
        method01(next);
    }

    // 字符类
    private static void method01(String str){
        // 1.验证字符串是否以h开头,d结尾,中间是aeiou的某一个字符
        boolean matches = str.matches("[h][aeiou][d]");
        System.out.println("result = " + matches);

        // 2.验证字符串是否以h开头,d结尾,中间不是aeiou的某个字符
        boolean matches2 = str.matches("[h][^aeiou][d]");
        System.out.println("result2 = " + matches2);

        // 3.验证字符串是否是开头a-z的任意一个小写字母,后面跟ad
        boolean matches3 = str.matches("[a-z][a][d]");
        System.out.println("result3 = " + matches3);
    }
}

2.正则表达式—逻辑运算符

import java.util.Scanner;

public class Demo295RegexLogic {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String next = sc.next();
        method01(next);
    }

    private static void method01(String str) {
        // 1.要求字符串是小写字母开头,并且字符不能以【aeiou】开头,后面跟ad
        boolean result1 = str.matches("[[a-z]&&[^aeiou]][a][d]");
        System.out.println("result1 = " + result1);

        // 2.要求字符是aeiou的某一个字符开头,后面跟ad
        boolean result2 = str.matches("[aeiou][a][d]");
        System.out.println("result2 = " + result2);
    }
}

3.正则表达式—预定义字符

        语法示例:

                1.”.”:匹配任何字符。(重点) 不能加[]

                2."\\d":任何数字[0-9]的简写;(重点)

                3."\\D":任何非数字[^0-9]的简写;

                4.“\\s”空白字符:[ \t\n\x0B\f\r ]的简写

                5."\\S": 非空白字符:[^\s] 的简写

                6."\\w":单词字符:[a-zA-Z_0-9]的简写(重点)

                7."\\W":非单词字符:[^\w]

示例

import java.util.Scanner;

public class Demo296RegexPreDefine {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String next = sc.next();
        method01(next);
    }

    private static void method01(String next) {
        // 1.验证字符串是否为3位数字的
        boolean matches1 = next.matches("[0-9][0-9][0-9]");
        System.out.println("matches11 " + matches1);

        boolean matches2 = next.matches("\\d\\d\\d");
        System.out.println("matches12 " + matches2);

        // 2.验证手机号:1开头,第二位是3、5、8,剩下的都是0-9的数字
        boolean matches3 = "15546565656".matches("[1][358]\\d\\d\\d\\d\\d\\d\\d\\d\\d");
        System.out.println("matches13 " + matches3);
    }
}

4.正则表达式—数量词

        语法示例:x代表字符

        1.X?:x出现的数量为 0次或1次

        2.x*:x出现的数量为 0次到多次 任意次        

        3.X+:x出现的数量为 1次或多次 x>=1次

        4.x{n} :x出现的数量为 恰好n次 x=n次

        5.x{n}:x出现的数量为 至少n次x>=n次 x{3,}

        6.x{n,m}: x出现的数量为 n到m次(n和m都是包含的)        n=<X<=m

        示例

import java.util.Scanner;

public class Demo297RegexCount {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String next = sc.next();
        method01(next);
    }
    private static void method01(String str){
        // 验证手机号:1开头,第二位是3、5、8,剩下的都是0-9的数字
        boolean matches = str.matches("[1][358]\\d{9}");
        System.out.println("matches= "+matches);
    }
}

5.正则表达式—分组括号

        正则表达式-分组括号()        (abc)

import java.util.Scanner;

public class Demo298Regexkuohao {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String next = sc.next();
        method01(next);
    }
    private static void method01(String next) {
        // 校验abc可以出现任意次
        boolean matches = next.matches("(abc)*");
        System.out.println("Matches: " + matches);
    }
}

三、String中和正则相关的方法

boolean matches(string regex)        判断字符串是否匹配给定的正则表达式。

String[] split(String regex)         根据给定正则表达式的匹配拆分此字符串。

String replaceAll(string regex,String replacement)        把满足正则表达式的字符串,替换为新的字符

import java.util.Arrays;

public class Demo299RegexString {
    public static void main(String[] args) {
        String next = "abc hahah  hehe   hdjalkms";
        method01(next);
        String next2 = next.replaceAll(" +", "h");
        
        //String replaceAll(string regex,String replacement)  把满足正则表达式的字符串,替换为新的字符
        method01(next2);
    }

    private static void method01(String next) {
        // String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
        String[] arr1 = next.split(" +");
        System.out.println(Arrays.toString(arr1));
    }
}

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

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

相关文章

从11个视角看全球Rust程序员4/4:深度解读JetBrains最新报告

讲动人的故事,写懂人的代码 8 Rust程序员最喜欢用什么工具调试程序? 用println!或dbg!宏来调试一下 2022年:55%2023年:55%在IDE里玩玩UI调试 2022年:27%2023年:29%在控制台里调试调试 2022年:11%2023年:10%不调试,任性 2022年:5%2023年:6%有其他奇思妙想 2022年:1%…

开源的数字孪生平台

欧洲对工业4.0的追求体现在三个方面&#xff1a; 数字孪生、智能制造和万物互联。 资助2440万欧元的开源数字孪生平台 源代码&#xff1a; http://www.gitpp.com/ccdan/dpqq-digital-twins 这套数字孪生是工业4.0整体规划中的中的一项技术&#xff0c;实现了一种称为“数字…

Python武器库开发-武器库篇之链接提取器(六十)

Python武器库开发-武器库篇之链接提取器&#xff08;六十&#xff09; 链接提取器介绍 链接提取器&#xff08;Link Extractor&#xff09;是一种用于从网页中提取链接的工具。它可以从网页的源代码中识别出所有的链接&#xff0c;并将这些链接提取出来。链接提取器可以用于各…

Java技术驱动的智能ERP系统:打造企业高效管理与创新发展的数字化引擎

随着数字化浪潮的席卷&#xff0c;现代企业对于高效、稳定、易于扩展的管理系统需求愈发迫切。为了满足这一需求&#xff0c;我们倾力打造了一款基于Java技术的企业级资源规划&#xff08;ERP&#xff09;管理系统。该系统以Spring Cloud Alibaba、Spring Boot、MybatisPlus、R…

MySQL操作数据库语句

mysql关键字不区分大小写 1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] westos (带[ ]表示该语句可有可无) 2. 删除数据库 DROP DATABASE [IF EXISTS] westos 3.使用数据库 -- tab键的上面&#xff0c;如果你的表名或者字段名是一个特殊的字符&#xff0c;就需要带 …

基于Redis实现共享session登录

搭配食用&#xff1a;Redis&#xff08;基础篇&#xff09;-CSDN博客 项目实现前的 Mysql中的表&#xff1a; 表说明tb_user用户表tb_user_info用户详情表tb_shop商户信息表tb_shop_type商户类型表tb_blog用户日记表&#xff08;达人探店日记)tb_follow用户关注表tb_voucher优…

jquey+mybatis-plus实现简单分页功能

这篇文章介绍一下怎么通过JQuery结合mybatis-plus的分页插件实现原生HTML页面的分页效果&#xff0c;没有使用任何前端框架&#xff0c;主要是对前端知识的应用。 创建Springboot项目 Intellij IDEA中创建一个Springboot项目&#xff0c;项目名为pager。 添加必须的依赖包 修…

modbus流量计数据解析(4个字节与float的换算)

通过modbus协议从流量计中读取数据后&#xff0c;需要将获得的字节数据合成float类型。以天信流量计为例&#xff1a; 如何将字节数据合并成float类型呢&#xff1f;这里总结了三种方法。 以温度值41 A0 00 00为例 目录 1、使用char*逐字节解析2、使用memcpy转换2、使用联合体…

【每天学会一个渗透测试工具】Nessus安装及使用指南

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 其他扫描工具&#xff1a; AWVS和Xray&#xff1a;应用漏洞扫描工具 fscan&#xff1a;虽然能扫主机&#xff0c;但比较老了…

【ajax基础03】常用ajax请求方法和数据提交以及axios错误处理

一&#xff1a;请求方法 什么是请求方法&#xff1a; 浏览器对服务器资源&#xff0c;要执行的操作 常见请求方法如下 二&#xff1a;axios中应用 语法格式&#xff1a; method:为请求方法&#xff0c;默认情况下为get&#xff08;获取数据&#xff09; data&#xff1a;…

Nginx Proxy 代理测试

目录 https://blog.csdn.net/Lzcsfg/article/details/139781909 一. 实验准备 二. 配置反向代理 三. 配置二层代理 解释流程 一. 实验准备 关闭防火墙和selinux&#xff0c;准备三台同一网段的虚拟机 localhostRoucky_linux9.4192.168.226.20localhostRoucky_linux9.419…

STM32单片机-BKP和RTC

STM32单片机-BKP和RTC 一、Unix时间戳1.1 时间戳转换 二、BKP(备份寄存器)三、RTC(实时时钟)3.1 RTC工作原理 四、代码部分4.1 BKP备份寄存器4.2 RTC实时时钟 一、Unix时间戳 Unix时间戳定义为从伦敦时间的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒时间戳…

RoboDK试用期间提示无效或过期的许可证

问题描述 RoboDK下载下来在试用期间提示如下信息&#xff0c;不知道什么原因 临时解决方法 将C:\Users\${username}\AppData\Roaming\RoboDK该目录下的文件全部删除掉&#xff0c;便可以正常使用RoboDK应用了&#xff0c;但是等软件关闭后还是会出现上面的问题&#xff0c;…

【anaconda】本地永久设置镜像源

【anaconda】本地永久设置镜像源 可以通过命令行设置全局的 pip 配置&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

Windows系统下制作Windows 11系统U盘启动及安装指导

Windows系统下制作Windows 11系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口)&#xff1b;下载好对应的系统镜像&#xff1b;下载RUFUS或者软通碟U盘制作启动软件&#xff1b; 二、Windows操作系统下制作U盘启动&#xff08;这里以使用RUFUS软件为例&…

【ARMv8/ARMv9 硬件加速系列 4 -- 加解密 Cryptographic Extension 介绍】

文章目录 ARMv8.0 Cryptographic ExtensionFEAT_AESFEAT_PMULLFEAT_SHA1FEAT_SHA256ARMv8.2 扩展FEAT_SHA512FEAT_SHA3FEAT_SM3FEAT_SM4ARMv8.0 Cryptographic Extension ARMv8.0引入了加密扩展(Cryptographic Extension),旨在加速加密和解密操作。这一扩展通过新增专用指令…

BarTender软件最新版下载-bartender条码标签打印软件下载

​​BarTender​​是一款遵循“look and feel”标准的​​条码打印​​软件。​​BarTender​​条码打印软件能够帮助用户挥洒自如&#xff0c;轻松制作出标签条码&#xff0c;包括文本、图形、​​条形码​​和大多数序列化功能。BarTender条码打印软件功能强大、操作简单&…

排序模型的奥秘:如何用AI大模型提升电商、广告和用户增长的效果

摘要 排序模型是数字化营销中最重要的工具之一&#xff0c;它可以帮助我们在海量的信息中筛选出最符合用户需求和偏好的内容&#xff0c;从而提高用户的满意度和转化率。本文从产品经理的视角&#xff0c;介绍了常见的排序模型的原理和应用&#xff0c;包括基于规则的排序、基…

2024.6.18

Python的网络编程 网络四层 在开始前,我们需要先了解一下我们在网络通信过程中的四个层次 我们上网产生的数据都是经过协议栈一层一层的封装然后经网卡发送到网络&#xff0c;经网络发送到服务端&#xff0c;然后服务端又是一层一层的解封装拿到自己想要的数据。 我们学习的…

【Linux】自定义shell(命令行解释器)

原理&#xff1a; shell是命令行解释器&#xff0c;当有命令需要执行时&#xff0c;shell创建子进程&#xff0c;让子进程执行命令&#xff0c;而shell只需等待子进程退出即可。 其中我们使用了下面这几个函数&#xff1a; 获取命令行&#xff08;fgets函数&#xff09;。解析…