除中文外的正则_java正则表达式入坑指南
发布日期:2021-06-24 13:27:41 浏览次数:2 分类:技术文章

本文共 2187 字,大约阅读时间需要 7 分钟。

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

648c1e6c1172038e5e9aa6f3368fed7f.png

正则表达式初体验

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

Pattern 类

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

• Matcher 类

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

PatternSyntaxException

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

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

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

9b4f23ff074743a0ba130131f0b01537.png

例子输出结果为:

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

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

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

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

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

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

• (A)

• (B(C))

• (C)

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

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

c9361282aacb6fd163d877a67622789c.png

实例输出结果为:

DSCS0001/20200113/1898888888820200113101638.mp3

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

小福利

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

• 匹配中文字符:

System.out.println(Pattern.matches("[一-龥]", "好"));

匹配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/weixin_33178459/article/details/112535091 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:获取表数据_DBus数据库表结构变更处理方案
下一篇:华为业务板块_手机业务受挫,华为把目光投向了哪些新市场

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月20日 17时27分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

nginx动静分离 2019-04-28
java基础之泛型对象与json互转 2019-04-28
注册中心nacos完整部署及与eureka区别 2019-04-28
【记录】我在团队合作中遇到过的胎神(扑街仔)级别前端小伙伴 之 莫名其妙配置0.0.0.0这种IP访问 2019-04-28
【经典】全局公共scss文件的引入使用 2019-04-28
【抬杠】在某些时候不希望用户缩小浏览器的宽度,因为咳咳~会导致你的布局混乱,那么这个代码就是帮助你如何限制浏览器宽度的 2019-04-28
喂!讲真~我很讨厌chrome谷歌浏览器的默认填充输入框input样式咧,敲击讨厌滴啦,怎么去掉介个样式尼??? 2019-04-28
【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing(还是古法炮制、传统工艺的原生代码兼容性最好,推荐!!!) 2019-04-28
【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件,我们来点干货! 2019-04-28
如何用bat文件快速计算项目代码行数 2019-04-28
《你的背包》歪唱 2019-04-28
散文《犯贱》 2019-04-28
【老司机开车了】CSS3实现“微信拍一拍头像抖动效果” 2019-04-28
如何在本地安装tomcat、jdk并且配置tomcat环境变量(window7) 2019-04-28
修改IDEA项目的JDK应用路径 2019-04-28
IDEA设置单击左侧项目文件,自动在右侧编辑器打开 2019-04-28
【全网唯一】全网唯一能够跑通的,跑不通你来找我!用node.js完成微信支付下单功能,且只需要一个文件wxpay.js就搞定业务流程的node.js程序 2019-04-28
【绝对靠谱】Vue生成二维码Qrcode,可插入二维码中心logo图标,可以设置二维码颜色大小等属性 2019-04-28
《擦屁股先生》词:你挚爱的强哥 2019-04-28
node.js创建WebSocket服务,并使用原生js ES6完成对WebSocket数据交互 2019-04-28