正则表达式
在了解正则表达式之前,我们先看几个非常常见的问题:
一种直观的想法是通过程序判断,这种方法需要为每种用例创建规则,然后用代码实现。下面是判断手机号的代码:
上述代码仅仅做了非常粗略的判断,并未考虑首位数字不能为0
等更详细的情况。除了判断手机号,我们还需要判断电子邮件地址、电话、邮编等等。为每一种判断逻辑编写代码实在是太繁琐了。有没有更简单的方法?
有!用正则表达式!
正则表达式可以用字符串来描述规则,并用来匹配字符串。一个正则表达式一个描述规则的字符串,所以,只需要编写正确的规则,就可以让正则表达式引擎去判断目标字符串是否符合规则,以下代码是 Java 中正则表达式的使用方法示例。
① 精确匹配
正则表达式的匹配规则是从左到右按规则匹配。首先来看如何使用正则表达式来做精确匹配。

② 单字符匹配
匹配任意字符:.
匹配一个任意字符。
匹配数字:如果我们只想匹配0
~9
这样的数字,可以用\d
匹配。
匹配非数字:用\d
可以匹配一个数字,而\D
则匹配一个非数字。
匹配常用字符:用\w
可以匹配一个字母、数字或下划线,w的意思是word。
匹配空格字符:用\s
可以匹配一个空格字符,注意空格字符不但包括空格,还包括tab字符(在Java中用\t
表示)。

至少一个字符:修饰符+
可以匹配至少一个字符。
0个或一个字符:修饰符?
可以匹配0个或一个字符。
匹配指定数量:如果我们想精确指定n个字符怎么办?用修饰符{n}
就可以。
匹配指定区间数量:如果我们想指定匹配n~m个字符怎么办?用修饰符{n,m}
就可以。

① 匹配开头和结尾
② 匹配指定范围
如果我们规定一个7~8位数字的电话号码不能以0
开头,应该怎么写匹配规则呢?\d{7,8}
是不行的,因为第一个\d
可以匹配到0
。
[...] 可以匹配范围内的字符
③ 或规则匹配
用|
连接的两个正则规则是或规则
④ 使用括号
现在我们想要匹配字符串 learn java
、learn php
和 learn go
怎么办?一个最简单的规则是
earn\sjava|learn\sphp|learn\sgo,但是这个规则太复杂了,可以把公共部分提出来,然后用(...)
把子规则括起来表示成learn\s(java|php|go)
。
