正则表达式(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); // 输出: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);
- }
复制代码 总结:
正则表达式是一个强大的文本处理工具,能够根据模式灵活匹配字符串。通过理解字符类、元字符、量词、分组和边界等,可以处理各种复杂的字符串匹配需求。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |