写点什么

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

作者:喵手
  • 2022 年 7 月 07 日
  • 本文字数:3485 字

    阅读完需:约 11 分钟

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

  1. 对于[ac],就表示 ac 中的任意一个。

  2. 表示范围可用-组合使用,比如:[a-z]表示 a~z 范围内的任意字符。

  3. 表示求否可用^组合使用;例如:[^abc]表示除 a、b、c 外的任意字符。

  4. ...

6️⃣边界匹配符

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

  • ^:行的开头

  • $:行的结尾

  • \b:单词的边界

  • \B:非单词的边界

  • \A:输入的开头

  • \G:前一个匹配的结尾

  • \Z:输入的结尾,仅用于最后的结束符

  • \z:输入的结尾

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

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

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 正则的同时,能去主动思考一下校验规则,比如校验邮箱、校验门牌号、校验身份证号等之类的常见需求场景,这样才能进步的快。​​​... ...

五、文末

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

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

wished for you successed !!!


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

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

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

发布于: 刚刚阅读数: 5
用户头像

喵手

关注

还未添加个人签名 2022.07.05 加入

还未添加个人简介

评论

发布
暂无评论
java零基础入门-Java正则表达式_Java_喵手_InfoQ写作社区