第二十七章 正则表达式
- 1.正则快速入门
- 2.正则需求问题
- 3.正则底层实现1
- 4.正则底层实现2
- 5.正则底层实现3
- 6.正则转义符
- 7.正则字符匹配
- 8.字符匹配案例1
- 9.字符匹配案例2
- 11.选择匹配符(|)
- 12.正则限定符
- {n}
- {n,m}
- +(1个或者多个)
- *(0个或者多个)
- ?(0个或者1个)
 
- 13.正则定位符
- ^ 指定起始字符
- $ 指定结束字符
- \\\b 匹配目标字符串的边界
- \\\B 匹配目标字符串的非边界
 
- 14.捕获分组
- (pattern)
- (?<name> pattern)
 
- 15.非捕获分组
- (?:pattern)
- (?=pattern)
- (?!pattern)
 
- 16.非贪婪匹配
- 17.正则应用实例
- 1.汉字
- 2.邮政编码
- 3.QQ号码
- 4.手机号码
 
- 18.正则验证复杂URL
- 19.Pattern类
- 20.Matcher类
- start/end
- matches
- replaceAll
 
- 21.反向引用
- 22.反向引用案例
- 23.结巴去重案例
- 24.替换分割匹配
- 25.本章练习01
- 26.本章练习02
- 27.本章作业03

1.正则快速入门

 
 (1)
 
 
(2)
 
 
(3)
 
 
(4)
 
 
 
 
 
 加个编号
 
 
 如果我们想要快速提取以下内容的IP地址
 
 
 
2.正则需求问题

 
 
 
3.正则底层实现1

 
 
 
4.正则底层实现2
查找到第一个字符1998的过程
 
 
 查找到第二个字符1999的过程
 
 
5.正则底层实现3

 加了一个括号之后
 
 
 
 
6.正则转义符

 
 
 
 注意:如果这里没有转义字符,编译是错误的
 
 
 下面如果我们只写一个 . ,表示我们要找到所有字符
 如果要找到 . 本身,则需要加上转义字符
 
 
 
 
7.正则字符匹配

 
 +表示一个或多个的意思
8.字符匹配案例1

 

 
 
 
 2.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9.字符匹配案例2

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11.选择匹配符(|)

 
 
12.正则限定符

 
 
{n}

 
 
 下面这个表示要出现一个任意的数字,出现两次
 
 
 
{n,m}
尽可能匹配多的
 
 
 
 
 
 
 
 
 
+(1个或者多个)

 
 
 
 
*(0个或者多个)

 
?(0个或者1个)

 
 
 
13.正则定位符

^ 指定起始字符


 
 
 这里一个都匹配不到,因为不是以数字开头的
 
 
 
 
 
$ 指定结束字符


 
 
 
\\b 匹配目标字符串的边界

 
 
 
 
\\B 匹配目标字符串的非边界

 
 
 
14.捕获分组

 
 
(pattern)

 
 
 
 
(? pattern)

 
 
 
15.非捕获分组

 
(?:pattern)

 
 
 
 
(?=pattern)

 

(?!pattern)

 
 
16.非贪婪匹配

 
 
 
 
17.正则应用实例

1.汉字

 这里的中文的范围用16进制来表示
 
 
 
2.邮政编码

 
3.QQ号码

 
4.手机号码

 
18.正则验证复杂URL

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19.Pattern类

 
 
 
 
 
20.Matcher类

 
start/end

 
 
 
matches

 
 
 
replaceAll

 
 
 
21.反向引用

 
22.反向引用案例

 
 
 
 
 
 
 
 
 
 
23.结巴去重案例

 
 
 
 
 
 就是:虽然上面的正则表达式是匹配到的连续重复的字,但是捕获的是圆括号里面的内容, 所以捕获的组里面的字只有一个,因此使用replaceAll(“$1”)的意思是:用捕获到的单个字去替换匹配到的多个字
 
 
24.替换分割匹配

 
 
 
 
 
 
 
 
25.本章练习01

 . 在小括号中表示匹配任意字符,所以要写成\.
 这里直接用了String自带的matches方法
 
 
 加一个^和$更好
 
 
 前面不加也可以的原因是
 
26.本章练习02

 
 
 这里有个问题,下面这种写法也是正确的
 
 
 下面在做一下改进
 
 
27.本章作业03

 /abc这部分可以有0个或者多个
 
 
 