java正则表达式入坑指南

news/2025/6/4 10:34:20

在日常开发工作中,无论你使用的语言是java、python、shell、golang还是C#, 正则表达式是编程语言中几乎绕不开的话题。有了它,可以帮你快速定位到符合条件的文本内容。今天小编带大家一起来学习下正则表达式,相信通过这篇文章的介绍,能为以后的工作提供一个更清晰的思路。

正则表达式初体验

首先给大家介绍一下正则表达式使用的类,在java.util.regex 包中主要包括以下三个类:

Pattern 类

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

• Matcher 类

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

接下来,通过两个例子为大家演示正则表达式的使用。

使用正则表达式校验手机号是否合法:

例子输出结果为:

电话字符串[18488888888]是否合法? [false]

电话字符串[14788888888]是否合法? [true]

除了可以帮助大家快速校验数据格式是否正确外,在使用正则表达式时,我们还可以快速提取目标格式的数据内容,这个优势所借助的工具即是捕获组。

捕获组定义:把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

• ((A)(B(C)))

• (A)

• (B(C))

• (C)

可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。另外还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。

下面的例子为大家演示通过捕获组生成目标字符串:

实例输出结果为:

DSCS0001/20200113/1898888888820200113101638.mp3

通过以上两个实例,我们可以清晰的看出正则表达式在数据的验证和提取目标格式字符串的强大功能。

小福利

下面是小编为大家整理的一些在工作中常用的正则表达式,以期能帮助到大家。

• 匹配中文字符:

System.out.println(Pattern.matches("[\u4e00-\u9fa5]", "好"));

匹配Email地址

System.err.println(Pattern.matches("\\w[-\\w.+]*@([A-Za-z0-9][A-Za-z0-9]+\\.)+[A-Za-z]{2,14}", "hello2020@qq.com"));

• m-n 位的数字

System.out.println(Pattern.matches("^\\d{1,3}$", "123"));

密码必须由字母和数字组成,且长度要在6-12位之间

System.out.println(Pattern.matches("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$", "123hello456"));

一年的12个月(01~09和1~12) : ^(0?[1-9]|1[0-2])$

Pattern.matches("^((0?[1-9])|(1[0-2]))$", "11")

• 匹配时分秒

System.out.println(Pattern.matches("([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]", "11:10:11"));

IP地址格式

System.out.println(Pattern.matches("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}", "192.168.21.37"));

网址匹配包含http、https、ftp协议

System.out.println(Pattern.matches("^(https?|ftp)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]", "http://www.bdqn.cn/"));

小结

今天这篇文章,通过两个实例为大家详细介绍了正则表达式在编程过程中的强大功能:

1. 校验数据格式是否正确

2. 提取目标格式的字符串内容

结合小编整理的一些作用广泛的表达式,相信大家对于我们今天的主题正则表达式有了一个更为清晰的认知。

 

怎么样,你了解了么?欢迎和我们一起探讨。

更多IT技术干货,请关注课工场,和我们一起关注前沿技术,快速提升。

 

文章来源:https://blog.csdn.net/kgc_cn/article/details/105584477
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-3397121.html

相关文章

Oracleblockcleanout说明

原 Oracle block cleanout 说明https://blog.csdn.net/tianlesoftware/article/details/6663527版权声明: https://blog.csdn.net/tianlesoftware/article/details/6663527 一. Block Cleanout 说明 文章的整理参考:http://www.orawh.com/60.html 之…

神经网络之卷积和池化(一)

卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC。 1. 卷积 1.1 单通道、一个卷积核的例子 卷积操作的作用是为了进行特征的提取,下图以 5*5 矩阵 A (一副图像的像素值)&#x…

OpenGL: 反馈

使用glRenderMode设定模式&#xff0c;glFeedbackBuffer进行反馈&#xff0c;glPassThrough使用标记。#include <stdio.h> #include <math.h> #include <Windows.h> #include <gl/GL.h> #include <gl/GLU.h> #include <gl/glut.h> #includ…

Python 自动化运维3-Print输出

Python语言之Print输出方法Print 输出方法&#xff1a; - 表示左对齐 表示正号 0 表示用0填充 f 前指定一个最小宽度 . 指定小数点后的精度 格式:% [flag][width][.precision]typecode 方法1&#xff1a; 1.num 7.9 print the num is %f % num 2.num 7.9 num2 10 print the…

一个能让cin和scanf 一样快的方法:

cin慢是有原因的&#xff0c;其实默认的时候&#xff0c;cin与stdin总是保持同步的&#xff0c;也就是说这两种方法可以混用&#xff0c;而不必担心文件指针混乱&#xff0c;同时cout和stdout也一样&#xff0c;两者混用不会输出顺序错乱。正因为这个兼容性的特性&#xff0c;导…

Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 详解

Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing&#xff1a; ACS) 详解 版权声明&#xff1a; https://blog.csdn.net/tianlesoftware/article/details/7573502 一&#xff0e;自适应游标共享&#xff08;Adaptive Cursor Sharing&#xff09; 说明 1.1 AC…

看来博客要停一阵子

近期忙成狗&#xff0c;看来博客要停一阵子。可能几个月&#xff0c;回来会继续写一些游戏编程精粹的相关学习内容。

android获取其他应用权限(修改状态)

这两天老大发话说要我研究一下安卓安全软件的功能&#xff0c;先抽取了一个小模块&#xff0c;研究权限管理 一开始就去packagemanager 去看发现有几个方法&#xff1a; 就先去看了一下IPackagemanager 里面的方法&#xff1a; 有很多 这里我之列出跟权限有关的 PermissionInf…

OpenGL: 一个简单的例子

使用GLUT工具包&#xff0c;显示列表绘制一个三角形&#xff0c;根据OpenGL版本判定使用基本的glBegin,glEnd方法&#xff0c;还是glVertexPointer,glDrawArrays方法。#include <Windows.h> #include <gl/GL.h> #include <gl/GLAux.h> #include <gl/GLU.h…

云时代传统运维的出路

Hey! 云计算新技术是 机遇还是挑战 云时代&#xff1f; 前段时间刚报道&#xff0c;在长沙可以通过百度地图打的百度的无人汽车。这个消息是令人震撼的&#xff0c;虽说距离大面积实行推广还有不少的路要走&#xff0c;但这说明了未来的方向。 我听到这个消息时&#xff0c…