哈喽,各位小伙伴们好,我是喵手。

        今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。

        我是一名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跟%
"\\*\\?"  // 匹配 * ?

java零基础入门-Java正则表达式_java      你们可能会发现,怎么怎么多反斜杠其实呢,对于反斜杠本身也需要转义,'\\'等于一个反斜杠。

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之间的任意一个字符,那么使用预定义字符就显得非常无力,此时就需要使用方括号来表示了,具体解释如下:

  1. 对于[ac],就表示ac中的任意一个。
  2. 表示范围可用-组合使用,比如:

[a-z]

  1. 表示 a~z 范围内的任意字符。
  2. 表示求否可用^组合使用;例如:

[

  1. ^abc

]

  1. 表示除a、b、c 外的任意字符。
  2. ...

6️⃣边界匹配符

除以上这些之外,Java 正则还支持如下 所示的几个边界匹配符。

  • ^:行的开头
  • $:行的结尾
  • \b:单词的边界
  • \B:非单词的边界
  • \A:输入的开头
  • \G:前一个匹配的结尾
  • \Z:输入的结尾,仅用于最后的结束符
  • \z:输入的结尾

7️⃣三种模式的数量表示符

如下是对于三种模式(贪婪模式、勉强模式、占有模式)的数量表示符的具体说明。

java零基础入门-Java正则表达式_正则_02java零基础入门-Java正则表达式_正则_03

8️⃣正则实现验证电话号码

具体学习了如上正则,我觉得基本有能力徒手实现该手机号的正则校验了,接下来我就给大家演示一下,如何定义一个正则,且如何通过字符串去匹配?

具体演示代码请看如下:

public static void main(String[] args) {
//定义一个验证手机号的正则表达式
String regex = "^1[3|4|5|7|8][0-9]{9}$";
String answer = "y";
do {
System.out.print("请输入您要注册的电话号码:");
Scanner scan = new Scanner(System.in);
String phone = scan.next(); // 接收用户在控制台输入的电话号码
Pattern pattern = Pattern.compile(regex); // 编译正则表达式
Matcher matcher = pattern.matcher(phone); // 创建给定输入模式的匹配器
boolean bool = matcher.matches();
if (bool) { // 如果验证通过
System.out.println("输入的电话号码格式正确。");
} else {
System.out.println("输入的电话号码格式错误。");
}
System.out.print("是否继续输入?(y/n)");
answer = scan.next();
} while (answer.equalsIgnoreCase("y"));
System.out.println("注册结束。");
}

其中: do…while 语句进行循环操作,当用户输入n,则跳出循环。String类中的equalsIgnoreCase() 方法作用是将字符串与指定的对象比较,不区分大小写。      重点其实也就是正则的编写 如果你们还没有完全学会,可以先参考下我这边给到的,然后一句一句解析;String regex = "​​^1[3|4|5|7|8][0-9]{9}$​​";

具体演示结果如下:

请输入您要注册的电话号码:1
输入的电话号码格式错误。
是否继续输入?(y/n)y
请输入您要注册的电话号码:1
输入的电话号码格式错误。
是否继续输入?(y/n)y1
请输入您要注册的电话号码:15797701911
输入的电话号码格式正确。
是否继续输入?(y/n)n
注册结束。

java零基础入门-Java正则表达式_字符串_04      相对而言还是挺好玩的,就是需要你们大家在入门java正则的同时,能去主动思考一下校验规则,比如校验邮箱、校验门牌号、校验身份证号等之类的常见需求场景,这样才能进步的快。

... ...

       好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。

五、文末

       教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜 欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------