张小飞的Java之路——第四十五章——正则表达式

张小飞的Java之路——第四十五章——正则表达式诸小亮 今天我们学习 正则表达式 诸小亮 正则表达式 简称 正则 是一种文本规则 主要用来处理字符串数据 例如 查询 分割 替换等 实际开发中使用非常广泛

大家好,欢迎来到IT知识分享网。

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

1. 介绍

诸小亮:今天我们学习——正则表达式

张小飞:啥是正则表达式?

诸小亮:正则表达式——简称:正则,是一种文本规则,主要用来处理字符串数据,

例如:查询、分割、替换等,实际开发中使用非常广泛

张小飞:额。。。。,完全不懂

诸小亮:举个例子,去某个王章注册账号,都有一些要求,比如:

张小飞的Java之路——第四十五章——正则表达式

张小飞:是啊,这怎么了?

诸小亮:上图中对邮箱地址的要求,如果用普通的 if 判断会比较麻烦,比如:

private static void checkEmail(String s) { String a_z = "abcdefghigklmnopqrstuvwxyz"; String z_9 = "abcdefghigklmnopqrstuvwxyz0_"; int len = s.length(); if(len <= 6 || len >= 18){ System.out.println("长度不对"); }else{ char[] chars = s.toCharArray(); if(!a_z.contains(chars[0]+"")){ System.out.println("不是字母开头"); }else { for(char c : chars){ if(!z_9.contains(c+"")){ System.out.println("只能使用字母、数字、下划线"); } } } } }

张小飞:麻烦吗?不就是多用了几个 if 嘛

诸小亮:但是,使用正则表达式判断就会简单很多

private static void checkEmail(String s) { //表示首字母应该是a-z之间,剩下的由0-9a-z_之间的字符组成,{5,17}:表示除了首字母,剩下的长度>=5 && <=17 String regex = "[a-z][0-9a-z_]{5,17}"; //判断字符串是否符合要求 if(s.matches(regex)){ System.out.println("符合要求"); }else{ System.out.println("不符合要求"); } }

张小飞:还真是,这么说,正则还是挺有用的

诸小亮:那当然,正则——由各种符号组成

好处:使用操作字符串更加简单 弊端:阅读性很差

张小飞:嗯嗯,这倒是,阅读性确实不好

诸小亮:其实学习正则,主要就是学习各种符号的使用,推荐一个网站:https://regex101.com/

2. 常用符号

张小飞:都有哪些符号?

诸小亮:正则中的符号分为好几类:字符类、预定义字符、数量符号等

2.1. 字符类

诸小亮:第一种,[a-z]:表示 a-z 之间的任意一个字母,修改代码中的正则

张小飞的Java之路——第四十五章——正则表达式

然后,传入一个 ‘a’

张小飞的Java之路——第四十五章——正则表达式

结果:

张小飞的Java之路——第四十五章——正则表达式

张小飞:这么说,传入 ‘b’、’c’等,都是符号要求的?

诸小亮:不错,只要是 a-z 的字母,都符合要求

诸小亮:第二种,[abc]——表示 abc 中的任意一个字符

张小飞的Java之路——第四十五章——正则表达式

张小飞的Java之路——第四十五章——正则表达式

张小飞:明白了

诸小亮:还有一些其他的常见表达式

[^abc]: 除了 abc,都行 [a-zA-Z]: 可以是 a-z 或 A-Z 中的任意一个 [a-z&&[def]]: a-z 和 [def]的交集 [0-9]: 可以是 0-9 中的任意一个

2.2. 预定义字符

张小飞:什么是预定义字符?

诸小亮:其实就是表示固定含义的字符,比如:”.“——可以表示任意字符

张小飞:任意字符?

诸小亮:是的,’.[a-z]’——表示可以以任意字符开头

张小飞:¥、#、%,这样开头也行嘛?

诸小亮:可以,记住——是任意字符

张小飞:明白了

诸小亮:其他的预定义字符有:

\d:表示数字[0-9], \D:表示[^0-9] \s:表示空白字符,比如:空格、回车、制表符(\t) \S:非空白字符 \w:表示[a-zA-Z_0-9] \W:表示[^\w]

2.3. 数量符

张小飞:什么是数量符?

诸小亮:就是表示某个字符出现几次,比如:a?——表示 a 在字符串中出现一次,或者没有出现

张小飞:‘?’就是1次或0次吗?

诸小亮:是的

诸小亮:其他数量符

2. a*: 表示 a 在字符串中出现 0 次,或多次 3. a+: 表示 a 在字符串中出现 1 次,或多次 4. a{n}: 表示 a 在字符串中出现 n 次 5. a{n,}: 表示 a 在字符串中至少 n 次 6. a{n,m}: 表示 a 在字符串中至少 n 次,但不超过 m 次

3. 常用功能

张小飞:说了这么多符号,实际的用一下吧

诸小亮:这个要求很合理,无法拒绝

3.1. 匹配

诸小亮:先给你一个例子,验证手机号是否正确

String regex = "1[35678]\\d{9}"; // 1:表示1开头 //[35678]:表示第2个字符是35678中的其中一个 //\\d{9}:表示剩下的必须是在[0-9]中,长度9

诸小亮:判断某个字符串 str 是否符合正则的要求,str.matches(regex)

3.2. 切割

诸小亮:String 的 split 方法用过吧

张小飞:当然用过了,切割字符串嘛

诸小亮:可以通过正则对字符串进行切割

public static void main(String[] args) throws IOException, ClassNotFoundException { String s = "yase,lvbu diaochan"; //根据","和" "对字符串进行切割 String[] arr = s.split("[, ]");//逗号 或者 空格 for(String str : arr){ System.out.println(str); } }

结果:

张小飞的Java之路——第四十五章——正则表达式

3.3. 替换

诸小亮:也可以对字符串中的一些字符进行替换,调用 String 的 replace 方法

public static void main(String[] args) throws IOException, ClassNotFoundException { String s = "yase,lvbu diaochan"; //替换字符串中的","和" " String s2 = s.replaceAll("[, ]", "----"); System.out.println(s2); }

结果:

张小飞的Java之路——第四十五章——正则表达式

3.4. 查找

诸小亮:其实用的最多的应该是查找功能,获取字符串中符合规则的子串

public static void main(String[] args) throws IOException, ClassNotFoundException { // 需求:查出字符串中"1"开头的 3 位的数字 String regex = "1\\d{2}"; String string = "yase123lvbu12diaochan234change124"; //1. 将规则编译称Pattern对象 Pattern pattern = Pattern.compile(regex); //2. 跟字符串关联获取匹配对象Matcher Matcher matcher = pattern.matcher(string); //3. 查找符合规则的子串 while (matcher.find()) { System.out.println(matcher.group()); } }

结果:

张小飞的Java之路——第四十五章——正则表达式

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/93538.html

(0)
上一篇 2024-10-26 08:33
下一篇 2024-10-26 10:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信