首页 理论教育 Java程序设计:正则表达式

Java程序设计:正则表达式

时间:2023-11-01 理论教育 版权反馈
【摘要】:从JDK 1.4开始提供了对正则表达式的支持,位于java.util.regex包里。其中,参数regex用来匹配此字符串的正则表达式,replacement用来替换每个匹配项的字符串,返回替换后所得的新字符串。利用正则表达式对给定字符串进行分割。

Java程序设计:正则表达式

在处理字符串时,经常会用到正则表达式。从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 利用正则表达式对字符串进行分割

当利用正则表达式无法正确分割时,检查下正则表达式中是不是有特殊字符需要加转义反斜线字符('\')。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈