正则表达式通常被用于判断语句中,来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\\d”表示字母0~9中任何一个,“\\d”就是元字符。正则表达式中元字符及其意义,如表1所示。
表1 正则表达式中的元字符
元字符 |
正则表达式中写法 |
意义 |
. |
“.” |
代表任意一个字符 |
\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{Alnum} |
\\p{Alnum} |
数字或字母字符 |
\p{Punct} |
\\p{Punct} |
标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
\p{Graph} |
\\p{Graph} |
可见字符:[\p{Alnum}\p{Punct}] |
\p{Print} |
\\p{Print} |
可打印字符:[\p{Graph}\x20] |
\p{Blank} |
\\p{Blank} |
空格或制表符:[\t] |
\p{Cntrl} |
\\p{Cntrl} |
控制字符:[\x00-\x1F\x |
说明:在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果向使用普通意义的点字符“.”,必须使用转义字符“\”。
在正则表达式中可以使用方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如reg =“[abc]
[^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&&[^bc]]:代表字母a、d.(差运算)
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如“A*”,代表A可在字符串中出现0次或多次。修饰限定符的用法如表2所示。
表2 限定符
限定修饰符 |
意义 |
示例 |
? |
0次或1次 |
A? |
* |
0次或多次 |
A* |
+ |
一次或多次 |
A+ |
{n} |
正好出现n次 |
A{2} |
{n,} |
至少出现n次 |
A{3,} |
{n,m} |
出现n次至m次 |
A{2,6} |
例 在项目中创建类Judge,在主方法中实现使用正则表达式来判断指定的变量是否是合法的E-mail地址。
public class Judge { //新建类
public static void main(String[] args) { //主方法
String regex = "\\w{0,}\\@\\w{0,}\\.{1}\\w{0,}"; //正则表达式,定义邮箱格式
String str1 = "aaa@"; //定义字符串str1
String str2 = "aaaa"; //定义字符串str2
String str3 = "aaaaa@111.com"; //定义字符串str3
if(str1.matches(regex)){ //matches()方法可判断字符串是否与正则表达式匹配
System.out.println(str1+" 是一个E_mail地址格式"); //输出信息
}
if(str2.matches(regex)){ //判断字符串str2是否与正则表达式匹配
System.out.println(str2+" 是一个E_mail地址格式"); //输出信息
}
if(str3.matches(regex)){ //判断字符串str3是否与正则表达式匹配
System.out.println(str3+" 是一个E_mail地址格式"); //输出信息
}
else{ //如果str1、str2、str3与正则表达式都不匹配
System.out.println("都不是E_mail地址格式"); //输出信息
}
}
}
运行结果如图2所示
图2 运行结果