正则表达式(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{3}-\d{4}$
\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); // 输出:HelloWorld
例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); // 输出:true
例3:使用 split() 分割字符串
String sentence = "This is a test.";
String[] words = sentence.split("\\s+"); // 按空格分割
for (String word : words) {
System.out.println(word);
}
总结:
正则表达式是一个强大的文本处理工具,能够根据模式灵活匹配字符串。通过理解字符类、元字符、量词、分组和边界等,可以处理各种复杂的字符串匹配需求。
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END















暂无评论内容