正则表达式
正则表达式本质上就是字符串,可以用于指定一些规则,来校验其他字符串
Java中String
类提供进行正则匹配的函数matches()
String s = "规则";
"需要校验的字符串".matches(s);
语法
[]
:对一个字符进行匹配^
:表示除外-
:可以表示范围&&
:交集(正则)
:表示一个正则组|
:多个正则表达式写在一起,用|
分割
1. 字符类
[abc]
:只能是a
或b
或c
abc
等价于[a][b][c]
[^abc]
:除了a
和b
和c
之外的所有字符
[a-zA-Z]
:从a
到z
,以及从A
到Z
[a-z&&[def]]
:a-z
和[def]
的交集[a-z&&[^bc]]
:a-z
除了b
和c
2. 预定义字符类
.
:代表任意字符\d
:代表任意数字,等价于[0-9]
\D
:表示任意非数字,等价于[^0-9]
\s
:空白字符\S
:除空白字符,等价于[^\s]
\w
:单词字符类,包括a-z
和A-Z
和0-9
和下划线_
,等价于[0-9a-z_A-Z]
\W
:非单词字符类,等价于[^\w]
3. 数量
X+
:X
出现一次或多次X?
:X
出现0次或一次X*
:X
出现任意次数X{n}
:X
恰好出现n
次X{n,}
:X
至少出现n
次X{n,m}
:X
至少出现n
次,至多出现m
次
练习
1. QQ号
- 不能
0
开头 - 全部都是数字
5-12
位
String regex = "[1-9]\\d{4,11}";
2. 手机号
- 必须
1
开头 - 第二位
3-9
- 全部是数字,必须
11
位
String regex = "[1][3-9]\\d{9}";
3. 邮箱正则
String regex = "[\\w]+[@][\\w&&[^_]]+([\\.][a-zA-Z]{2,3})+";
String类中与正则相关的方法
public String replaceAll(String regex, String newStr)
:对调用的字符串中,与regex
匹配的部分,用newStr
替换
public String[] split(String regex)
:根据regex
匹配的结果,分割字符串,返回字符串数组
使用正则表达式做爬取
- 将正则表达式封装成一个
Pattern
对象 - 利用
Pattern
对象生成匹配器Matcher
- 调用匹配器的
find()
和group()
方法进行爬取