细节10 未卜先知——使用正则表达式
在程序设计过程中,经常需要对输入的数据进行检查,可以使用正则表达式来检查输入数据的合法性。从JDK 1.4开始,String类提供了matches ()方法,通过该方法,可以检查输入数据的合法性,使用该方法时需要为其传递一个正则表达式作为实参,该方法的语法格式如下:
boolean matches (String regex)
说明
该方法用于告知当前字符串是否匹配参数regex指定的正则表达式,如果当前字符串与参数指定的字符串匹配,则该方法返回真值true,否则该方法返回假值false。
在使用正则表达式时,要用到一些含有特殊意义的元字符和限定符,接下来对这些特殊字符进行讲解。
1.正则表达式的元字符及含义
正则表达式是由一些含有特殊意义的字符组成的字符串,这些含有特殊意义的字符称为元字符,如表5.2所示,列出了正则表达式的部分元字符及其含义与用法。
表5.2 正则表达式的部分元字符及其含义与用法
2.方括号中的元字符及含义
在正则表达式中还可以用方括号把多个字符括起来表示括号里的任意一个元字符。表5.3列出了方括号中元字符的含义。
表5.3 方括号中元字符的含义
3.正则表达式的限定符及含义
在使用正则表达式时,如果需要多个某一类型的元字符,需要依次输入多个元字符,这样做起来相当麻烦,这时可以使用正则表达式的限定符来限制重复内容的输入,在Java的正则表达式中可以使用限定符来限制元字符出现的次数。表5.4列出了常用限定符及其含义。
表5.4 常用限定符及其含义
接下来看一个判断指定的邮箱是否合法的示例,通过该示例可以了解和掌握正则表达式的使用。
❶String str="ccwork365@163. com"; // 指定的邮箱名 // 通过正则表达式判断邮箱名是否合法 ❷if (str. matches ("\\p{Alpha}\\w{2,15}[@][a-z0-9]{3, }[.]\\p{Lower}{2, }")){ System. out. println ("邮箱名合法。"); // 邮箱名合法时输出的信息 }else{ System. out. println ("邮箱名不合法。"); // 邮箱名不合法时输出的信息 }
本示例运行后,将在控制台输出“邮箱名合法。”,这是由于在标记❶处指定的邮箱名为 "ccwork365@163. com" ,这与在标记❷处为matches ()方法传递的正则表达式“\\p{Alpha}\\w{2,15}[@][a-z0-9]{3, }[.]\\p{Lower}{2, }”相匹配,所以该邮箱名是合法的。
说明
正则表达式中的“\\p{Alpha}”表示任何的一个字母字符,表示邮箱名必须以字母开头,这与邮箱名第一个字符 "c" 相匹配;正则表达式中的“\\w{2,15}”表示2~15个大小写字母或数字字符,与邮箱名中的 "cwork365”相匹配;正则表达式中的“[@]”表示一个“@”字符,与邮箱名中“@”相匹配;正则表达式中的“[a-z0-9]{3, }”表示至少有3个小写字母或数字字符,与邮箱名中“@”后的“163”相匹配;正则表达式中的“[.]”表示“.”字符,与邮箱名中“@163”后的点号“.”相匹配;正则表达式中的“\\p{Lower}{2, }”表示至少有两个小写字母字符,与邮箱名中“@163.”后的 "com" 相匹配,由于邮箱名的每个部分都与正则表达式相匹配,所以邮箱名是合法的。