java 零基础入门 -Java 正则表达式
哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。
我是一名 java 开发,所以日常接触到最多的就是 java 啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、概述
论前几期啊,我们是分别讲了Object类
、Date类
、FormDate类
、Calendar类
、System类
及StringBuilder类
,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
二、前言
在上一期,我们是重点学习了 java 反射机制的基础及一些实际运用,比如对于给定一个对象就可任意获取该对象任意信息,包括类包名、类名、类方法、类属性等信息。那我们这就算对 jav 反射有一定的基础认知了,那我们就算毕业了么?肯定不是,涉及的反射的知识点,远不于此,那如果你们真正想学好,还得接着去把反射更深的应用去理解清楚。
接下来这一期我是想给大家普及一下,java 的正则表达式。
三、本期教学目标
掌握何为正则表达式
正则所支持的合法字符
正则所支持的特殊字符
预定义字符
方括号表达式
边界匹配符
三种模式的数量表示符
正则实现验证电话号码
四、正文
1️⃣概念
说起正则,肯定大家都熟悉,正则,又称正规表示法,在代码中常简写为[ regex ]。谈起正则,它是一个强大的字符串处理工具,可以对字符串进行提取、查找、替换、分割等字符串操作,是一种可以用于模式替换和匹配的规范。对于一个正则,就是由普通字符(如:a~z)和特殊字符串组成。
而在 String 类中,它就提供了几种针对如上所提及到的字符串操作方法,具体如下:
boolean matches(String regex):判断该字符串是否匹配该正则表达式。
String replaceAll(String regex, String replacement):将该字符串中所有是 regex 的子串都替换成 replacement 字符串。
String replaceFirst(String regex, String replacement):将该字符串中的第一个是 regex 的子串替换成 replacement 字符串。
String[] split(String regex):以 regex 作为分隔符,把该字符串分割成多个以 regex 分割开的子串。
至于如上方法,你们有空的也可以去写点 demo 尝试一下,还是非常好使,至于 matches()方法,我就是得在下方必须实际会用到的,这个你们待会儿可以参考一下。
2️⃣正则所支持的合法字符
如下我会列举出正则所支持的合法字符,这个你们得看看。
X:字符 x(x 是可代表任何合法的字符)。
\0mnn:八进制数 0mnn 所表示的字符。
\xhh:十六进制值 0xhh 所表示的字符。
\t:制表符
\n:换行符
\r:回车符
\f:换页符
\e:Escape 符
\cx:x 对应的的控制符。
除此之外,正则表达式中还有一些特殊字符,这些特殊字符在正则表达式中有着发挥特殊的用途,就好比前面介绍的反斜线\,它就算一个。
3️⃣正则所支持的特殊字符
如下是要使用这些特殊字符,就必须先将这些字符转义,也就是在前面添加一个反斜线\即可。具体诺列请看如下:
$:匹配一行的结尾。如果要匹配()字符,请加上反斜杠,比如
\$。
^:匹配一行的开头。
():标记子表达式的开始和结束位置。
[]:用于确定中括号表达式的开始和结束位置。
{}:用于标记前面子表达式的出现频度。
*:指定前面子表达式可以出现零次或多次。
+:指定前面子表达式可以出现一次或多次。
?:指定前面子表达式可以出现零次或一次。
.:匹配除换行符
\n
之外的任何单字符。\:用于转义下一个字符,或指定八进制、十六进制字符。
|:指定两项之间任选一项。
注意:对于如上特殊字符,如果要匹配其自身请加上反斜杠,比如{、+、?等。
"\u0041\\%" // 匹配 A 跟 %
"\\*\\?" // 匹配 * ?
你们可能会发现,怎么怎么多反斜杠其实呢,对于反斜杠本身也需要转义,'\\'等于一个反斜杠。
然后将上面的多个字符拼起来,就可以创建一个正则表达式。例如:
4️⃣预定义字符
对于上面而言,只能匹配单个字符,如果想匹配多个,可以使用“通配符”,它可以匹配多个字符,对于正则中的通配符,远比超过普通通配符的功能,它就是预定义字符,如下是一些常用的预定义字符。
. :可以匹配任何字符.
\d :匹配 0~9 的所有数字.
\D :匹配非数字.
\s :匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等.
\S :匹配所有的非空白字符.
\w :匹配所有的单词字符,包括 0~9 所有数字、26 个英文字母和下画线("_")
\W:匹配所有的非单词字符.
有了预定义字符的出现,我们就可以来定义多字符的来进行匹配了。
\\d\\d\\d-\\d\\d\\d\\d-\\d\\d\\d\\d // 匹配如 000-0000-0000 形式的电话号码
5️⃣方括号表达式
在对于一些特殊情况,比如只匹配 a~z 之间的任意一个字符,那么使用预定义字符就显得非常无力,此时就需要使用方括号来表示了,具体解释如下:
对于[ac],就表示 ac 中的任意一个。
表示范围可用-组合使用,比如:
[a-z]
表示 a~z 范围内的任意字符。表示求否可用^组合使用;例如:
[
^abc]
表示除 a、b、c 外的任意字符。...
6️⃣边界匹配符
除以上这些之外,Java 正则还支持如下 所示的几个边界匹配符。
^:行的开头
$:行的结尾
\b:单词的边界
\B:非单词的边界
\A:输入的开头
\G:前一个匹配的结尾
\Z:输入的结尾,仅用于最后的结束符
\z:输入的结尾
7️⃣三种模式的数量表示符
如下是对于三种模式(贪婪模式、勉强模式、占有模式)的数量表示符的具体说明。
8️⃣正则实现验证电话号码
具体学习了如上正则,我觉得基本有能力徒手实现该手机号的正则校验了,接下来我就给大家演示一下,如何定义一个正则,且如何通过字符串去匹配?
具体演示代码请看如下:
具体演示代码请看如下:
其中: do…while 语句进行循环操作,当用户输入 n,则跳出循环。String 类中的 equalsIgnoreCase() 方法作用是将字符串与指定的对象比较,不区分大小写。
重点其实也就是正则的编写 如果你们还没有完全学会,可以先参考下我这边给到的,然后一句一句解析;String regex = "^1[3|4|5|7|8][0-9]{9}$
";
具体演示结果如下:
相对而言还是挺好玩的,就是需要你们大家在入门 java 正则的同时,能去主动思考一下校验规则,比如校验邮箱、校验门牌号、校验身份证号等之类的常见需求场景,这样才能进步的快。... ...
五、文末
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜 欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明: 本文为 InfoQ 作者【喵手】的原创文章。
原文链接:【http://xie.infoq.cn/article/a66322f93861597e69e8447f0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论