目录
1. 普通字符
普通字符就是字面上的意思,它们会匹配自身。例如:
a
匹配 "apple" 中的 "a"。b
匹配 "banana" 中的 "b"。
2. 特殊字符(元字符)
特殊字符有特殊的含义,用于定义更复杂的模式。
.
:匹配除换行符之外的任何单个字符。*
:表示前面的元素可以出现0次或多次。+
:表示前面的元素至少出现1次或多次。?
:表示前面的元素可以出现0次或1次。^
:匹配输入字符串的开始位置。$
:匹配输入字符串的结束位置。( )
:分组,将多个元素视为一个单元。[ ]
:字符类,匹配方括号内的任意一个字符。|
:逻辑或,匹配两个或多个表达式中的一个。\\
:转义字符,用于匹配特殊字符本身。
3. 字符类
字符类用于匹配一个特定的字符集合。
[abc]
:匹配 "a"、"b" 或 "c"。[a-z]
:匹配任意小写字母。[A-Z]
:匹配任意大写字母。[0-9]
:匹配任意数字。[a-zA-Z]
:匹配任意字母。[^abc]
:匹配除了 "a"、"b"、"c" 之外的任意字符。
4. 预定义字符类
预定义字符类是一些特殊的字符类,用于匹配常见的字符集合。
\d
:匹配任意数字,等同于[0-9]
。\D
:匹配非数字字符,等同于[^0-9]
。\w
:匹配任意字母数字字符,包括下划线,等同于[a-zA-Z0-9_]
。\W
:匹配非字母数字字符,等同于[^a-zA-Z0-9_]
。\s
:匹配任意空白字符(空格、制表符、换行符等)。\S
:匹配非空白字符。
5. 量词
量词用于指定元素出现的次数。
*
:0次或多次,如a*
匹配 "cat" 中的 "c","caaaat" 中的 "caaat"。+
:1次或多次,如a+
匹配 "cat" 中的 "ca","caaaat" 中的 "caaaa"。?
:0次或1次,如a?
匹配 "cat" 中的 "c","caaaat" 中的 "c"。{n}
:恰好n次,如a{3}
匹配 "a" 连续出现3次。{n,}
:至少n次,如a{2,}
匹配 "aa" 或 "aaaaa"。{n,m}
:至少n次,最多m次,如a{2,3}
匹配 "aa" 或 "aaa"。
6. 分组
分组用于将多个元素视为一个单元,并且可以应用量词。
(abc)
:将 "abc" 视为一个单元,可以应用量词,如(abc)+
匹配 "abcabc"。
7. 选择
选择用于匹配多个表达式中的一个。
a|b
:匹配 "a" 或 "b"。
8. 锚点
锚点用于指定模式的位置。
^
:匹配输入字符串的开始位置,如^abc
匹配 "abc" 仅当它位于字符串的开始处。$
:匹配输入字符串的结束位置,如abc$
匹配 "abc" 仅当它位于字符串的结束处。
9. 转义
转义用于匹配特殊字符本身。
\.
:匹配点字符。\*
:匹配星号字符。
10. Unicode字符
Unicode字符用于匹配特定的Unicode字符。
\u0041
:匹配大写字母 "A"。
案例:电子邮箱正则表达式详解
电子邮箱格式
[email protected]
其中:
- 用户名 (
username
) 由字母、数字、下划线、点、减号等组成,但不能以特殊符号开头或结尾,也不能有连续的点号。 - 域名 (
domain
) 包含字母和数字,可能有多个子域名,用点分隔。 - 顶级域名 (
com
) 由字母组成,通常为2到6个字符。
常用的邮箱正则表达式
String emailRegex = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]{2,6}$";
正则表达式解释
^
:匹配字符串的开始。[a-zA-Z0-9_.-]+
:匹配用户名部分,允许字母、数字、下划线_
、点.
和减号-
,并且至少包含一个字符。@
:匹配邮箱中的@
符号。[a-zA-Z0-9-]+
:匹配域名部分,允许字母、数字和减号-
,并且至少包含一个字符。\\.
:匹配点.
,表示域名与顶级域名之间的分隔符。[a-zA-Z]{2,6}
:匹配顶级域名部分,要求为2到6个字母的组合(如 .com, .org, .net 等)。$
:匹配字符串的结束。
示例代码
import java.util.regex.*;
public class EmailValidation {
public static void main(String[] args) {
// 邮箱正则表达式
String emailRegex = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]{2,6}$";
String[] emails = {
"[email protected]", // 合法
"[email protected]", // 合法
"[email protected]", // 合法
"[email protected]", // 合法
"user@domain", // 不合法,没有顶级域名
"[email protected]", // 不合法,顶级域名太短
"@domain.com", // 不合法,没有用户名
"[email protected]", // 不合法,域名不合法
};
Pattern pattern = Pattern.compile(emailRegex);
// 验证每个邮箱
for (String email : emails) {
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) {
System.out.println(email + " 是合法的邮箱地址。");
} else {
System.out.println(email + " 是不合法的邮箱地址。");
}
}
}
}
输出
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
user@domain 是不合法的邮箱地址。
[email protected] 是不合法的邮箱地址。
@domain.com 是不合法的邮箱地址。
[email protected] 是不合法的邮箱地址。
注意事项
虽然这个正则表达式能够匹配大多数有效的邮箱地址,但在实际开发中,完全验证邮箱地址的合法性可能涉及更多复杂的规则。例如,某些顶级域名可能会包含更多字符。实际应用中,建议除了正则表达式验证外,还结合发送验证邮件的方式来确保邮箱的有效性。
标签:字符,domain,匹配,邮箱地址,正则表达式,zA,user,Java From: https://blog.csdn.net/Q_w7742/article/details/142650238