而且必须是左边字符的值小于右边字符的值。
( [ { } ] ) \ ^ - $ | ? * + .
而在字符类中有点特殊,需要转义的有:
[ ] ^ - \
1
|
(
0
|([
1
-
9
][
0
-
9
]*)[+\\-*/])+(
0
|[
1
-
9
][
0
-
9
]*)
|
或者写成下面这样,即把“-”放到两边去,就不要转义了。
1
|
(
0
|([
1
-
9
][
0
-
9
]*)[-+*/])+(
0
|[
1
-
9
][
0
-
9
]*)
|
// DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。
// 现在各级域名均可以包含中文。
// 域名可以只有一位,如亚马逊 http://www.Z.cn、http://www.4.cn,顶级域名貌似至少两位,这里暂不限制。
// 标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。
// 由多个标号组成的完整域名总共不超过255个字符。
// 创新工场域名:innovation-works.com,带-熟称扁担域名,貌似也有-开头的域名。
// 网易企业邮:帐号只能以字母或数字开头,可包含字母,数字,下划线(_),减号(-)和点(.),实际验证最长20位。[email protected]或[email protected]。
// 网易邮:邮箱名6-18位;新浪字母邮、搜狐:邮箱名4-16位
// 匹配非中文邮箱 public void regexTest() { String str = "sd速度[email protected]!但是!"; String regex = "[a-zA-Z0-9][a-zA-Z0-9_\\-\\.]{0,19}@(?:[a-zA-Z0-9\\-]+\\.)+[a-zA-Z]+"; Matcher matcher = Pattern.compile(regex).matcher(str); while (matcher.find()) { regex = matcher.group(); System.out.println("test:" + regex); } } |
"[a-zA-Z0-9][a-zA-Z0-9_\\-\\.]{0,19}@(?:[a-zA-Z0-9\\-]+\\.)+[a-zA-Z]+"
( ? : exp ):匹配exp,不捕获匹配的文本到自动命名的组,也不给此分组分配组号,也就不会让内存等着你再次访问。
匹配中文邮箱:(默认中文、英文字母、数字开头,不包含下划线,可包含中文,英文字母,数字,下划线(_),减号(-)和点(.))
String regex = "[\u4e00-\u9fa5a-zA-Z0-9][\u4e00-\u9fa5_a-zA-Z0-9\\-\\.]{0,19}@(?:[\u4e00-\u9fa5a-zA-Z0-9\\-]+\\.)+[\u4e00-\u9fa5a-zA-Z]+";
匹配结果:sd速度[email protected]
[email protected] | |||||||||
[a-zA-Z0-9]
|
[a-zA-Z0-9_\\
-.]
|
{1,19}
|
@
|
(
|
[a-zA-Z0-9\\-]
|
+
|
\\.
|
)+
|
[a-zA-Z]+
|
字母数字开头 |
字母,数字,下划线(_),减号(-)和点(.);
|
1
|
|
|
域名:字母、数字、连字符
|
1
| 域名间的点,需转义 |
1
| 域名后缀 |
- 需转义》 \- 》转义符也需转义 \\- |
到19次
|
或
|
或
| ||||||
| 或 * |
更多次
|
更多次
| ||||||
x | f1-d | @ |
| -1- | . |
| cn | ||
|
|
|
| -1-.com. |
|