Java字符串整理笔记(四)
6. 使用正则表达式
正则表达式是一种描述字符串集的方法,是以字符串集合中各字符串的共有特征为依据的。在程序开发中,正则表达式被广泛地应用在字符串的
查找、替换、匹配等情况下,因此灵活地使用正则表达式对程序员非常重要。正则表达式中含有一些具有特殊意义的字符,这些字符称为正则表达式的元字符。
正则表达式中字符及其意义如下:
元字符 正则表达式的写法 含义 . “." 代表任意一个字符
\d “\\d" 代表0~9的任何一个数字 \D “\\D” 代表任何一个非数字字符 \s “\\s” 代表空白字符,如“\t”、“\n”
\S “\\S” 代表非空白字符
\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次或多次。修饰限定符的用法如下所示:
限定修饰符 意义 示例
? 0次或1次 A?
* 0次或多次 A*
+ 一次或多次 A+
{n} 正好出现n次 A{2}
{n,} 至少出现n次 A{5,}
{n,m} 出现n~m次 A{3,8}
实例6.1,创建类CheckOut,在该类中的主方法中定义验证字符串是否为合法的手机号码的方法,代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class CheckOut { public static void main(String[] args) { // TODO Auto-generated method stub String regex="0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}" +"|13[0-9]\\d{8}|15[1089]\\d{8}"; //验证手机号码的正则表达式 String str="13412345678"; //要进行验证的手机号码 Pattern pattern=Pattern.compile(regex); //编译正则表达式 Matcher matcher=pattern.matcher(str); //创建给定输入模式的匹配器 boolean bool=matcher.matches(); if(bool==true) { //如果验证为真 System.out.println("合法的正则表达式"); //给出提示信息 } else { //如果验证为假 System.out.println("不合法的正则表达式"); } } }
实例6.1执行的结果为:合法的正则表达式。
说明:电话号码包括固定电话和手机号码,其中,固定电话是由区号和号码组成,区号以0开头的,后面是2~3位数,因此在匹配区号的时候,可以使用
正则表达式“0\d{2,3}”,固定电话号码是由7~8位数字组成,因此可以使用表达式“\d{7,8}”来进行匹配。因为固定电话的组合方式可能是“区号-号码”或者是
“区号 号码”,因此,匹配固定电话号码,可以使用表达式“0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}”。手机号码是11位数,并以数字“1”开头,考虑到手机号码
的特殊性,则以正则表达式“13[0-9]\\d{8}|15[1089]\\d{8}”来对手机号码进行匹配。