JAVA常用API - 正则表达式

news2024/11/24 14:44:49

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

前言

一,正则表达式是什么?

二,正则表达式符号

三,常用正则表达式组合

四,正则表达式的的效率 

五,学会编写正则表达式

匹配单个字符 

匹配多个字符  ​编辑

六,生成正则表达式插件

前言

大家好,我是最爱吃兽奶,今天给大家介绍一下正则表达式,跟着我的脚步一起去看看吧!


一,正则表达式是什么?

正则表达式是一种用来匹配和处理文本的工具,它可以用一些特定的符号和语法来描述一类字符串的模式。在计算机科学和各种编程语言中,正则表达式被广泛应用于文本搜索、替换、过滤、验证等方面。通过正则表达式,我们可以轻松地匹配出符合某种模式的文本,例如匹配电子邮件地址、电话号码、网址等。从而实现各种文本处理的功能。正则表达式可以用于多种编程语言,包括但不限于Java、Python、JavaScript、Perl等,在计算机编程、文本编辑、数据处理等领域有着广泛的应用,是一种强大而灵活的工具。


 二,正则表达式符号

1.元字符
元字符是正则表达式中具有特殊含义的字符它们用于匹配特定的字符或字符集合。常见的元字符包括:
.:匹配任意字符,除了换行符。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前面的字符零次或多次。
+:匹配前面的字符一次或多次。
?:匹配前面的字符零次或一次。
{n}:匹配前面的字符恰好n次。
{n,}:匹配前面的字符至少n次。
{n,m}:匹配前面的字符至少n次,但不超过m次。
[]:匹配字符集合中的任意一个字符。
|:表示或的关系,匹配两个或多个表达式中的任意一个。
():用于分组,将多个元素组合成一个整体。
\:用于转义元字符,使其失去特殊含义。
2.转义字符
转义字符用于将元字符转义为普通字符或将普通字符转义为元字符。常见的转义字符包括:
\d:匹配数字字符。
\D:匹配非数字字符。
\w:匹配字母、数字或下划线字符。
\W:匹配非字母、数字或下划线字符。
\s:匹配空格、制表符或换行符。
\S:匹配非空格、制表符或换行符字符。
\b:匹配单词边界。
\B:匹配非单词边界。
\\:匹配反斜杠字符本身。
需要注意的是,在Java中使用正则表达式时
需要将反斜杠字符\转义为\\,否则会出现编译错误。
例如,要匹配一个数字字符,可以使用\d,但在Java中需要写成\\d。

三,常用正则表达式组合

下面是常用的

  1. 匹配电子邮件地址:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  1. 匹配手机号码:
^1[3-9]\d{9}$
  1. 匹配身份证号码(18位):
^\d{17}[\dXx]$
  1. 匹配URL:
^(http|https)://[a-zA-Z0-9./?%&=+-_]+$ 
  1. 匹配日期(yyyy-mm-dd):
^\d{4}-\d{2}-\d{2}$
  1. 匹配IP地址:
^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$
  1. 匹配用户名(字母开头,允许字母数字下划线,长度为6-16位):
^[a-zA-Z][a-zA-Z0-9_]{5,15}$

下面基本全部涵盖

  1. 匹配手机号码:
^1[3-9]\d{9}$
  1. 匹配身份证号码(15位或18位):
^\d{15}(\d{2}[0-9xX])?$
  1. 匹配社会信用代码(18位):
^[0-9A-Z]{18}$
  1. 匹配URL:
^(http|https)://[a-zA-Z0-9./?%&=+-_]+$ 
  1. 匹配日期(yyyy-mm-dd):
^\d{4}-\d{2}-\d{2}$
  1. 匹配IP地址:
^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$
  1. 匹配用户名(字母开头,允许字母数字下划线,长度为6-16位):
^[a-zA-Z][a-zA-Z0-9_]{5,15}$
  1. 匹配密码(长度为8-16位,必须包含字母和数字):
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$
  1. 匹配汉字:
^[\u4e00-\u9fa5]{0,}$
  1. 匹配邮政编码:
^[1-9]\d{5}$
  1. 匹配MAC地址:
^([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}$
  1. 匹配QQ号码:
^[1-9][0-9]{4,10}$
  1. 匹配微信号码(允许字母、数字、下划线、中划线,长度为6-20位):
^[a-zA-Z0-9_-]{6,20}$
  1. 匹配整数:
^-?\d+$
  1. 匹配浮点数:
^-?\d+\.\d+$
  1. 匹配非负整数:
^\d+$
  1. 匹配非负浮点数:
^\d+\.\d+$
  1. 匹配正整数:
^[1-9]\d*$
  1. 匹配正浮点数:
^[1-9]\d*\.\d+|0\.\d*[1-9]\d*$
  1. 匹配非正整数:
^-[1-9]\d*|0$
  1. 匹配非正浮点数:
^(-([1-9]\d*\.\d+|0\.\d*[1-9]\d*))|0\.{0,1}$

 


 四,正则表达式的的效率 

假如现在要求校验一个qq号码是否正确。

规则:  1. 6位及20位之内

           2. 0不能在开头

           3. 必须全部是数字。

先使用目前所学知识完成校验需求然后体验一下正则表达式检验。

 

麻烦吗? 不管你觉得麻烦也好,不麻烦也好,反正我是觉得麻烦

why? 因为哥会正则表达式!

来,展示


 五,学会编写正则表达式

接下来,我会一点点的教你去写正则表达式,如果你不想写,请跳到插件处即可,当然了,我是推荐大家去了解下的,毕竟没什么坏处不是?那么,来吧!

前言:

matches是Java中的一个方法,用于判断一个字符串是否符合某个正则表达式的格式。其使用方法如下:

String regex = "正则表达式";
String str = "待匹配字符串";
boolean isMatch = str.matches(regex);

匹配单个字符 

        /*
        * 匹配单个字符
        * */

        // 只能是 a b c 中的一个
        System.out.println("a".matches("[abc]"));// true
        System.out.println("?".matches("[abc]"));// false

        // 不能出现 a b c 中的一个
        System.out.println("a".matches("[^abc]"));// true
        System.out.println("?".matches("[^abc]"));// false

        // a到z和A到Z(包括头尾的范围)
        System.out.println("z".matches("[a-zA-z]")); // true
        System.out.println("aa".matches("[a-zA-z]"));//false
        System.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //true

        // [a-z&&[def]] a-z和def的交集。为:d,e,f
        System.out.println("d".matches("[a-z&&[def]]")); //true
        System.out.println("0".matches("[a-z&&[def]]")); //false
        
        /*
         \表示转义字符
         两个\的理解方式:前面的\是一个转义字符,改变了后面\原本的含义,
         把他变成一个普普通通的\而已。
        */

        //  .  表示任意一个字符
        System.out.println("你".matches("..")); //false
        System.out.println("你".matches(".")); //true
        System.out.println("你我".matches(".."));//true

        // \\d 表示任意的一个数字
        // 简单来记:两个\表示一个\
        System.out.println("a".matches("\\d")); // false
        System.out.println("3".matches("\\d")); // true

        // \\w 只能是一位单词字符[a-zA-Z_0-9]
        System.out.println("z".matches("\\w")); // true
        System.out.println("2".matches("\\w")); // true
        System.out.println("你".matches("\\w"));//false

        // 非单词字符 \\W
        System.out.println("你".matches("\\W")); // true

匹配多个字符  

六,生成正则表达式插件

 看效果

 

 

上面的正则表达式的书写给大家写的很浅,大家只要能读懂即可,正则表达式大部分都可以直接搜到

直接拿来用即可,不过能看懂还是有点用的!!

总结

大家只要了解并能够使用正则表达式解决问题即可,最好还要能够读懂正则表达式并能写出简单的正则表达式,下一次再见到正则表达式估计就是给大家讲爬取的地方了,尽情期待吧!

 

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

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

相关文章

利用MySQL的binlog恢复误删的数据库

1 查看当前数据库内容并备份数据库 查看数据库信息: 备份数据库: [rootlocalhost ~]# mysqldump -u root -p t > /mnt/t.sql Enter password: [rootlocalhost ~]# ll /mnt/t.sql -rw-r--r-- 1 root root 1771 Aug 25 11:56 /mnt/t.sql2 开启bin…

java-----web项目部署到新服务器以及服务器的部署

目录 一、服务器安装jdk1.8 二、安装mysql5.7 2.1下载mysql 2.2修改root账号密码 2.3设置远程登录 三、项目的部署 3.1导入数据库 3.2将项目打成jar包 3.3项目上传 服务器部署项目的方式,本次以打成jar包的形式讲解(以springboot项目为例&#xf…

2023年贵工程团体程序设计赛--部分题解

作者:杨书瑶 单位:贵州工程应用技术学院 本次比赛由大学生程序设计协会(cpa)举办,共计17道题,295分。其中5分题三道,10分题三道,15分题两道,20分题三道,25分题两道,30分题两道…

chatgpt赋能Python-pythonbus

PythonBus: 为Python 开发者量身打造的社区 对于所有Python 开发者而言,PythonBus 是一个非常值得加入的社区平台。该平台汇聚了全球最顶尖的Python 开发者,同时也是一站式排除各种问题并交流经验的平台。在PythonBus,无论你是初学者还是专家…

【模电实验】基本放大电路的研究实验

实验四 基本放大电路的研究实验(2小时) —、实验目的 (1)充分认识分压式偏置放大电路的电压放大作用,了解其静态工作点的调节、测量,认识截止失真和饱和失真现象,了解消除截止失真和饱和失真…

华为OD机试真题 Java 实现【计算网络信号】【2023Q2 200分】

一、题目描述 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。 注意: 网络信号可以绕过阻隔物array[m][n]的二维数组代表网格地图,array[i][j]0代表i行j列是空旷位置&#xff…

DAY 64 mysql主从复制与读写分离

概念 什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) ,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要读写分离呢? 因为数据库的…

【Linux系列P2】Linux基本指令知识(带图演示,精炼)

前言 大家好,这里是YY的Linux系列part2;本章主要内容面向能使用Linux的老铁,主要内容含【设置普通用户】【Linux基本知识】【基本指令大全】 在下一章节【Linux系列part3】中,YY将手把手讲述Linux的权限知识,欢迎订阅YY的Linux专栏…

MyBatis 是什么?与 Hibernate 的区别是什么?

MyBatis 是一种基于 Java 的持久化框架,它可以将 SQL 语句和 Java 代码进行映射,使得开发人员可以使用面向对象的方式来操作数据库。MyBatis 通过提供 XML 配置文件或注解方式来配置映射关系,使得数据库操作变得更加简单和灵活。 与 Hiberna…

VS Code 配置 C/C++ 开发环境

一、软件下载 需要下载的软件如下: VS Code编译工具:MinGW 或 MSYS2 或 VS2022 VS Code 下载地址:链接 MinGW 下载地址:链接 或者 链接 MSYS2 下载地址:链接 VS2022 下载地址:链接 上述软件下载完成以后…

入门JavaScript编程:上手实践四个常见操作和一个轮播图案例

部分数据来源:ChatGPT 简介 JavaScript是一门广泛应用于Web开发的脚本语言,它主要用于实现动态效果和客户端交互。下面我们将介绍几个例子,涵盖了JavaScript中一些常见的操作,包括:字符串、数组、对象、事件等。 例子…

Java【TCP 协议2】好多人都错了! 保证可靠传输的不是三次握手和四次挥手! 而是...

文章目录 前言一、确认应答1, 什么是确认应答2, 序列号和确认应答号 二、超时重传1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系…

蓝牙RFCOMM 协议

蓝牙RFCOMM 1.RFCOMM1.1 服务定义模型1.2 字节排序 2 RFCOMM数据帧2.1 选项和模式2.2 帧类型2.3 帧格式2.3.1 Address2.3.2 Control(帧类型)2.3.3 Length2.3.4 InfoData2.3.5 FCS 2.4 多路复用控制命令(DLCI 0)2.4.1 DLC paramete…

OpenCV基础操作(4)颜色空间转换、几何变换、图像二值化操作

OpenCV基础操作(4)颜色空间转换、几何变换、图像二值化操作 import cv2 as cv import numpy as np一、颜色空间转换 1、转换颜色空间 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。 我们…

《面试1v1》volatile

基本功 我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官: 你能解释一下 volatile 关键字的作用吗? 候选人: 当我们在编写多线程程序时,经常会遇到线程安全的问…

iptables防火墙(一)

iptables防火墙 一、iptables概述1、netfilter 与 iptables 的关系1.netfilter2.iptables 2、四表五链1.四表2.五链3.表的匹配优先级4.规则链之间的匹配顺序5.规则链内的匹配顺序 二、iptables防火墙的安装及配置方法1、iptables防火墙安装2、iptables防火墙的配置方法1.iptabl…

nginx(七十八)日志的深入探究

一 日志 ① nginx与日志相关的指令 access_log log_format error_log rewrite_log log_subrequest debug_connection rewrite_log limit_conn_log_level limit_req_log_level log_not_found open_log_file_cache uninitialized_variable_warn log_not_found …

【重新定义matlab强大系列八】利用matlab求局部值(函数islocalmax求局部最大值+函数islocalmin求局部最小值)

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

三控开关接线方式记录

参考原视频 三控开关与双控开关的多种接法,多控开关的工作原理_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Qh4y1J7gC/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e原视频讲的不错,大家可以关…

国内好用的免费AI处理工具:Chat8(实现类似ChatGPT功能、TCP/IP通讯问题)

目前国外的ChatGPT比较火,朋友推荐了一个chat8,经过使用,觉得还不错,链接如下: https://ai.chat86.co/go/kl/775283,进去后可以直接用手机注册使用,以下是我问其关于TCP/IP的对话过程&#xff0…