正则表达式(Regular Expression, regex) 是一种用于匹配字符串的强大工具,广泛应用于文本查找、替换和验证操作中。它通过特定的模式来描述要匹配的文本。
正则表达式(Regular Expression, regex) 是一种用于匹配字符串的强大工具,广泛应用于文本查找、替换和验证操作中。它通过特定的模式来描述要匹配的文本。
1. 正则表达式的基本组成部分
字符类
[abc]
:匹配 a
、b
或 c
中的任意一个字符。
[^abc]
:匹配除 a
、b
、c
之外的任何字符(取反)。
[a-z]
:匹配所有小写字母。
[A-Z]
:匹配所有大写字母。
[0-9]
:匹配所有数字。
.
(点号):匹配除换行符以外的任意单个字符。
元字符
\d
:匹配任意数字,等价于 [0-9]
。
\D
:匹配非数字字符,等价于 [^0-9]
。
\w
:匹配字母、数字、下划线,等价于 [a-zA-Z0-9_]
。
\W
:匹配非字母、数字、下划线,等价于 [^a-zA-Z0-9_]
。
\s
:匹配任何空白字符(包括空格、制表符、换行符)。
\S
:匹配任何非空白字符。
量词(指定匹配次数)
*
:匹配前面的字符 0 次或多次,例如 a*
匹配 0 个或多个 a
。
+
:匹配前面的字符 1 次或多次,例如 a+
匹配 1 个或多个 a
。
?
:匹配前面的字符 0 次或 1 次,例如 a?
匹配 0 个或 1 个 a
。
{n}
:匹配前面的字符恰好 n 次,例如 a{3}
匹配 3 个 a
。
{n,}
:匹配前面的字符至少 n 次,例如 a{2,}
匹配 2 个或更多 a
。
{n,m}
:匹配前面的字符至少 n 次,至多 m 次,例如 a{2,4}
匹配 2 到 4 个 a
。
边界匹配符
^
:匹配字符串的开头。例如,^a
匹配以 a
开头的字符串。
$
:匹配字符串的结尾。例如,a$
匹配以 a
结尾的字符串。
\b
:匹配单词边界。例如,\bword\b
只匹配独立的 word
。
\B
:匹配非单词边界。例如,\Bword\B
匹配不在边界上的 word
。
分组与引用
(abc)
:将 abc
作为一个组。例如 (abc)+
匹配一个或多个 abc
。
\1
、\2
等:引用前面括号中的匹配结果。例如,(a)(b)\1\2
匹配 abab
。
或运算
a|b
:匹配 a
或 b
。例如,apple|orange
匹配 apple
或 orange
。
2. 常用正则表达式示例
匹配一个有效的电子邮件地址
| ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
^[a-zA-Z0-9._%+-]+
:以字母、数字、点、下划线、百分号、加号、减号等字符开头,并匹配一个或多个这些字符。
@[a-zA-Z0-9.-]+
:匹配 @ 后的域名部分。
\.[a-zA-Z]{2,}$
:匹配一个点后跟 2 个或更多的字母。
匹配电话号码(如:123-456-7890)
\d{3}
:匹配三个数字。
-
:匹配连字符。
\d{4}
:匹配四个数字。
匹配 IP 地址
| ^([0-9]{1,3}\.){3}[0-9]{1,3}$ |
([0-9]{1,3}\.){3}
:匹配三段 1 到 3 个数字,后面跟一个点。
[0-9]{1,3}
:匹配最后一段 1 到 3 个数字。
匹配 URL
| ^(https?|ftp)://[^\s/$.?#].[^\s]*$ |
https?|ftp
:匹配 http
、https
或 ftp
。
[^\s/$.?#]
:匹配非空白字符或 /
、.
、$
、?
、#
等。
[^\s]*$
:匹配路径部分,直到结束。
3. Java 中的正则表达式使用
在 Java 中,正则表达式常用于 String
类的 replaceAll()
、matches()
、split()
方法,或 Pattern
和 Matcher
类。
例1:使用 replaceAll
去除非字母字符
| String text = "Hello, World!"; |
| String result = text.replaceAll("[^a-zA-Z]", ""); |
| System.out.println(result); |
例2:验证电子邮件地址
| String email = "example@test.com"; |
| boolean isValid = email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"); |
| System.out.println(isValid); |
例3:使用 split()
分割字符串
| String sentence = "This is a test."; |
| String[] words = sentence.split("\\s+"); |
| for (String word : words) { |
| System.out.println(word); |
| } |
总结:
正则表达式是一个强大的文本处理工具,能够根据模式灵活匹配字符串。通过理解字符类、元字符、量词、分组和边界等,可以处理各种复杂的字符串匹配需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!