在处理字符串时,经常会用到正则表达式。从JDK 1.4开始提供了对正则表达式的支持,位于java.util.regex包里。正则表达式(regular expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
(1)给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。
(2)可以通过正则表达式,从字符串中获取我们想要的特定部分。
1.正则表达式的构造规则
在Java中,可以查看API文档中的java.util.regex.Pattern类,里面有正则表达式的构造帮助。常见的正则表达式的构造规则说明如下:
(1)单个字符举例:
x 表示字符x
\\ 表示反斜线字符
(2)字符类举例:
[abc] 表示a、b或c(简单类)
[^abc] 表示任何字符,除了a、b或c(否定)
[a-z A-Z] 表示a到z或A到Z,两头的字母包括在内(范围)
[0-9] 表示0到9的字符
(3)预定义字符类举例:
. 表示任何字符。如果要表示.字符本身,需要通过转义\.
\d 表示数字,等价于[0-9]
\D 表示非数字:[^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 表示单词字符,等价于[a-z A-Z_0-9]
\W 表示非单词字符,等价于[^\w]
(4)边界匹配器举例:
^ 表示行的开头
$ 表示行的结尾
\b 表示单词边界
(5)Greedy数量词举例:
X? 表示X有一次或一次也没有
X* 表示X有零次或多次
X+ 表示X有一次或多次
X{n} 表示X恰好n次
X{n,} 表示X至少n次
X{n,m} 表示X至少n次,但是不超过m次
(6)Logical运算符举例:
X|Y 表示X或Y
(X) 表示X整体作为捕获组
【例7-7】(www.xing528.com)
编写一个或多个数字、QQ号码、手机号码、邮箱的正则表达式。
(1)一个或多个数字正则表达式:
一个或多个数字(即全数字)的正则表达式:^[0-9]+$或者^\d+$。
(2)QQ号码正则表达式:
假定QQ号码的规则为5~12的数字,不能以0开头,正则表达式可以写为:^[1-9]\d{4,11}$。
(3)手机号码正则表达式:
假定目前手机号码是以13、14、15、17、18开头的11位数字,正则表达式可以写为:^1[3|4|5|7|8]\d{9}$。
(4)邮箱正则表达式:
假设邮箱名称只允许由英文、数字和下划线组成,且可以多次出现,邮箱的域名部分至少要有二级域名,这样的邮箱正则表达式可以写成:
^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-z A-Z0-9_]+)+$,或者^\w+@\w+(\.\w+)+$。
2.String类对正则表达式的支持
1)字符串匹配正则表达式判断
给定一个正则表达式,可以判断给定的字符串是否符合正则表达式的过滤逻辑,也就是“匹配”功能。String类中的方法public boolean matches(String regex)用于判断此字符串是否匹配给定的正则表达式。参数regex为用来匹配此字符串的正则表达式,当且仅当此字符串匹配给定的正则表达式时,返回true。
【例7-8】
判断给定邮箱字符串是否合乎预定义正则表达式。
测试类Regex Test1如图7-7所示。
图7-7 字符串匹配正则表达式测试
要验证一个字符串是否为邮箱,首先要根据需要定义邮箱账号的格式,即邮箱的正则表达式,然后调用String类的matches方法进行匹配。注意正则表达式中有特殊含义的字符,书写时需要使用转义反斜线字符('\')进行转义。
2)利用正则表达式进行替换
String类的方法public String replaceAll(String regex,String replacement)使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。其中,参数regex用来匹配此字符串的正则表达式,replacement用来替换每个匹配项的字符串,返回替换后所得的新字符串。
String类的方法public String replaceFirst(String regex,String replacement)使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
【例7-9】
利用正则表达式对给定字符串进行替换操作。
测试类Regex Test2如图7-8所示。
图7-8 利用正则表达式对字符串进行替换
3)利用正则表达式分割字符串
String类的方法public String[]split(String regex)根据匹配给定的正则表达式来拆分此字符串,分割后的所有子字符串放在字符串数组里返回。
【例7-10】
利用正则表达式对给定字符串进行分割。
测试类Regex Test3如图7-9所示。
图7-9 利用正则表达式对字符串进行分割
当利用正则表达式无法正确分割时,检查下正则表达式中是不是有特殊字符需要加转义反斜线字符('\')。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。