Java字符串整理笔记(四)

时间:2022-04-26 19:39:55

 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}”来对手机号码进行匹配。