前言
正则表达式是一种强大的工具,用于处理字符串匹配和文本解析。在这篇博客中,我们将通过代码示例,详细讲解正则表达式的基本语法规则以及在Java中的实际应用
什么是正则表达式?
正则表达式(Regular Expression)是一种用来描述字符模式的规则。它可以用来验证字符串是否符合规则,或者从一段文本中提取特定的子字符串
正则表达式的典型应用:
- 字符串校验(如校验手机号码、邮箱地址等)
- 文本搜索与替换
- 数据解析
Java 正则表达式的基本用法
在Java中,Pattern
和Matcher
类是处理正则表达式的核心。以下是几个关键概念和用法:
(1) 字符类
字符类用来匹配特定范围内的字符。以下是常见的字符类:
表达式 | 描述 |
---|---|
[abc] |
匹配 a 、b 或 c
|
[^abc] |
匹配除 a 、b 和 c 以外的字符 |
[a-zA-Z] |
匹配任意大小写英文字母 |
[a-d[m-p]] |
匹配 a-d 或 m-p 范围内的字符 |
[a-z&&[^bc]] |
匹配 a-z 中除了 b 和 c 的字符 |
代码示例:
1 2 3 | System.out.println( "a" .matches( "[abc]" )); // true System.out.println( "z" .matches( "[abc]" )); // false System.out.println( "bc" .matches( "[abc][abc]" )); // true |
(2) 预定义字符类
预定义字符类是字符类的简化写法,用来匹配常见的字符类型
表达式 | 描述 |
---|---|
. |
匹配任意字符 |
d |
匹配数字,等价于 [0-9]
|
D |
匹配非数字,等价于 [^0-9]
|
s |
匹配空白字符 |
S |
匹配非空白字符 |
w |
匹配字母、数字、下划线,等价于 [a-zA-Z0-9_]
|
W |
匹配非字母、数字、下划线 |
代码示例:
1 2 3 | System.out.println( "123" .matches( "\d+" )); // true System.out.println( "@" .matches( "\w" )); // false System.out.println( "abc_123" .matches( "\w+" )); // true |
(3) 数量词
数量词用来指定字符出现的次数
表达式 | 描述 |
---|---|
X? |
匹配 X 0 次或 1 次 |
X* |
匹配 X 0 次或多次 |
X+ |
匹配 X 1 次或多次 |
X{n} |
匹配 X 恰好出现 n 次 |
X{n,} |
匹配 X 至少出现 n 次 |
X{n,m} |
匹配 X 至少出现 n 次但不超过 m 次 |
代码示例:
1 2 | System.out.println( "123456789" .matches( "\d{9}" )); // true System.out.println( "123" .matches( "\d{1,5}" )); // true |
正则表达式实际应用
(1) 校验规则
校验QQ号
规则:6-20位数字,不能以 0 开头
1 2 | String qq = "12345678987" ; System.out.println(qq.matches( "[1-9]\d{5,19}" )); // true |
校验手机号码
规则:以 1
开头,第二位是 3-9
,后面跟 9 位数字
1 2 | String phone = "13933447894" ; System.out.println(phone.matches( "1[3-9]\d{9}" )); // true |
校验邮箱地址
规则:用户名部分允许字母、数字、下划线,域名部分允许字母和数字,支持多级后缀
1 2 | String email = "gaomengsuanjia@163.com" ; System.out.println(email.matches( "\w+([-+.']\w+)*@[a-zA-Z0-9]+(\.[a-zA-Z]{2,})+" )); // true |
校验座机号码
规则:开头以 0
,后接 2-3 位区号,支持带或不带连字符
1 2 | String tel = "020-5698137" ; System.out.println(tel.matches( "0\d{2,3}-?[1-9]\d{4,9}" )); // true |
(2) 文本查找
利用 Pattern
和 Matcher
可以在大段文本中找到符合条件的子串
查找包含版本号的 Java 关键字
1 2 3 4 5 6 7 | String text = "java8和java11是长期支持版本,下一个是java17。" ; Pattern pattern = Pattern.compile( "java\d{0,2}" ); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println(matcher.group()); } // 输出:java8、java11、java17 |
通过以上代码示例和解释,我们了解了正则表达式的基本规则及在Java中的应用方式。正则表达式作为字符串处理的利器,可以极大提高开发效率。在实际项目中,我们可以利用正则表达式解决各种文本匹配和校验问题
最后,为了帮助大家复习正则表达式,可以玩一个小游戏
总结
到此这篇关于Java正则表达式详解及实用案例的文章就介绍到这了,更多相关Java正则表达式实用内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!