### 使用正则表达式

正则表达式通常被用于判断语句中，来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串，这些特殊字符称为正则表达式的元字符。例如，“\\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\x7F]

说明：在正则表达式中“.”代表任何一个字符，因此在正则表达式中如果向使用普通意义的点字符“.”，必须使用转义字符“\”。

在正则表达式中可以使用方括号括起来若干个字符来表示一个元字符，该元字符可代表方括号中的任何一个字符。例如 reg =“[abc]4”。这样字符串“a4”、“b4”、“c4”都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如：

[^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 运行结果