在我们日常的编程中,常常需要验证一个字符串是否满足于我们需求的格式,例如判断邮箱地址是否合法,手机号码是否合法等,这时,我们便可以运用正则表达式,用来检查字符串是否满足我们规定的格式。正则表达式是含有一些特殊意义字符的字符串,这些特殊意义的字符串称为正则表达式的元字符。
元字符 | 正则表达式中的写法 | 意义 |
---|---|---|
. |
. |
代表任意一个字符 |
\d |
\\d |
代表0~9的任何一个数字 |
\D |
\\D |
代表任何一个非数字字符 |
\s |
\\s |
代表空白字符,如‘\t’、'\n' |
\S |
\\S |
代表非空白字符 |
\w |
\\w |
代表可用作标识符的字符,但不包括“$” |
\W |
\\W |
代表不可用于标识符的字符 |
\p{Lower} |
\\p{Lower} |
代表小写字母a~z |
\p{Upper} |
\\p{Upper} |
代表大写字母A~Z |
\p{ASCII} |
\\p{ASCII} |
ASCII字符 |
\p{Alpha} |
\\p{Alpha} |
字母字符 |
\p{Digit} |
\\p{Digit} |
十进制数字,即0~9 |
\p{Punct} |
\\p{Punct} |
数字或字母字符 |
\p{Graph} |
\\p{Graph} |
标点符号:"!$&*()+-,'<>=@{|}[\]^_~ |
\p{Print} |
\\p{Print} |
可见字符:[\p{Alnum}\p{Punct}] |
\p{Blank} |
\\p{Blank} |
可打印字符:[\p{Graph}\x20] |
\p{Cntrl} |
\\p{Cntrl} |
空格或制表符:[\t] |
\p{Lower} |
\\p{Lower} |
抑制字符:[\x00-\x1F\x7F] |
注:在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“\”
方括号的用法:
[^456]:代表4、5、6之外的任何字符。
[a-r]:代表a~r中的任何一个字母。
[a-zA-Z]:代表任意一个英文字母
[a-e[g-z]]:代表a~e,或g~z的任何一个字母(并运算)
[a-o&&[def]]:代表字母d、e、f(交运算)
[a-d&&[^be]]:代表字母a、d(差运算)
在正则表达式中允许使用限定修饰符来限定元字符的出现次数。
限定修饰符 | 意义 | 示例 |
---|---|---|
? |
0次或1次 |
A? |
* |
0次或多次 |
A* |
+ |
一次或多次 |
A+ |
{n} |
正好出现n次 |
A{2} |
{n,} |
至少出现n次 |
A{2,} |
{n,m} |
出现n~m次 |
A{2,4} |
应用实例:
1、运用正则表达式来判断指定的变量是否为合法的E-mail地址。
public class Demo22 {
public static void main(String[] args) {
String mail = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}"; //定义要匹配E-mail地址的正则表达式
String str1="aaa@";
String str2="aaaaa";
String str3="123@56asd.sro.com";
if(str1.matches(mail)){
System.out.println(str1+"是一个合法的E-mail地址");
}
else
System.out.println(str1+"不是一个合法的E-mail地址");
if(str2.matches(mail)){
System.out.println(str2+"是一个合法的E-mail地址");
}
else
System.out.println(str2+"不是一个合法的E-mail地址");
if(str3.matches(mail)) {
System.out.println(str3 + "是一个合法的E-mail地址");
}
else
System.out.println(str3+"不是一个合法的E-mail地址");
}
}
运行结果:
2、使用正则表达式来判断字符串是否为合法的手机号
public class Demo20 {
public static void main(String[] args) { // 主方法
String regex = "1[358]\\d{9}"; //也可写成[1][358][0-9]{9}
String text = "15123456789";
if (text.matches(regex)) {
System.out.println(text + "是合法的手机号");
}
}
}
运行结果: