Java——正则表达式

近来学习到了正则表达式,在此整理以便理解。

1.定义:

正则表达式(regular expression)是一个字符串,可用于描述匹配一个字符串集合的模式,便于字符串的处理。可以使用正则表达式来进行匹配、替换和拆分字符串。

2.匹配字符串:

String类中的matches方法不仅可以匹配一个固定的字符串,还可以匹配符合一个模式的字符串集。

例如:(语句结果为true。)

其中“Java.*”即为正则表达式,它描述了一个字符串模式,即:以Java开始后面跟0个或多个字符串,其中,子字符串“.*”匹配0个或多个任意字符。

3.正则表达式语法:

         正则表达式由字面值字符及特殊符号所组成。下表中列举出了正则表达式的常用的语法。

表1:正则表达式常用语法

 

正则表达式

匹配

1

x

指定字符x

2

.

任意单个字符,换行符除外

3

(ab|cd)

ab或者cd

4

[abc]

a、b、c

5

[^abc]

除了a、b或者c以外的任意字符

6

[a-z]

a到z

7

[^a-z]

除了a到z以外的任意字符

8

[a-e[m-p]]

a到e或m到p

9

[a-e&&[c-p]]

a到e与c到p的交集

10

\d

一位数字,等同于[0-9]

11

\D

一位非数字

12

\w

单词字符

13

\W

非单词字符

14

\s

空白字符

15

\S

非空白字符

16

p*

0次或者多次出现模式p

17

p+

1次或者多次出现模式p

18

p?

0次或者1次出现模式p

19

p{n}

正好出现n次模式p

20

p{n,}

至少出现n次模式p

21

p{n,m}

n到m(不包含)次出现模式p

22

\p{P}

一个标点字符!”@#$%^&*()等

 

Ps1:反斜杠是一个特殊的字符,在字符串中开始转义序列。因此Java中需要使用\\来表示\。

Ps2:空白字符是" ""\t""\n""\r""\f",因此\s和[\t\n\r\f]等同,\S和[^\t\n\r\f]等同。

Ps3:单词字符是任何的字母,数字或下划线字符。因此\w等同于[a-z[A-Z][0-9]_]或者简化为[a-Za-z0-9]。

Ps4:可以使用括号来将模式进行分组。例如:(ab){3}匹配ababab,而ab{3}匹配abbb。

Ps5:表1中后面的六个条目*、+、?、{n}、{n,}以及{n,m}称为量词符(quantifier),用于确定量词符前面的模式会重复多少次。例如,A*匹配0或者多个A,A+匹配1或者多个A,A?匹配0或者1个A。A{3}精确匹配AAA,A{3,}至少匹配3个A,A{3,6}匹配3到6之间个A。*等同于{0,},+等同于{1,},?等同于{0,1}。

Warning:不要在重复量词符中使用空白。例如,A{3,6}不能写成逗号后有一个空白符的A{3, 6}。

常用案例构建正则表达式:

  1. 电话号码:以日常生活中的11位手机号为例

(xxx-xxxx-xxxx)

2.QQ邮箱:以10位QQ号为例(xxxxxxxxxx@qq)

参考资料:

梁勇. Java语言程序设计与数据结构基础篇[M]. 北京:机械工业出版社,2018.167-175

 

更多推荐

Java——正则表达式