目录
1.正则表达式的入门
1.1基础入门
匹配一些简单的需求
1.1.1字符组
允许配一组可能出现的的字符
[Jj]ava对应java和Java
1.1.2区间
如果匹配人以数组[1-9]
如果想要匹配所有小写字母[a-z]
想要匹配所有大写字母可[AZ]
1.1.3匹配特殊字符
---:\- []:\[ ():\(
1.1.4取反
比如:匹配一段不包括数字的正则
[^0-9]
不含小写字母的正则
1.2匹配多个数据
1.2.1重复
匹配028-88854和343-89489:\d{3}-\d{5}
1.2.2重复区间
有的时候我们并不知道有多少位,就可以利用重复区间
比如说匹配073和0683,可以是三个或者四个:\d{3,4}
1.2.3开闭区间
有时候我们遇到的字符数组没有边界
比如说匹配一个以f开头的数据:f.{1,}
1.3快捷方式
1.3.1快速匹配数字和字母
利用快捷方式来任意匹配单词字符匹配:\w
任意数字匹配:\d
1.3.2匹配空格
如果想要空白间隔的单词:\s
1.3.3单词边界
如果想要mater整个单词的匹配,就是一段文字中有mater这个单词,而不是单个字符
/bmater/b
1.3.4快捷方式取反
将小写改为大写就是快捷方式取反
不以字母开头的单词:\W
1.3.5开始和结束
指定一个字符串作为结束或者开始
比如说ppp作为字符串的开头:/^ppp/:xxxxppp这段字符串匹配
比如说ppp作为一段文本的结尾:/ppp$/
1.3.6任意字符
.字符表示任意单个字符
1.3.7可选字符
匹配hiut和hit,可以观察到u字符可以存在也可以不存在,这个时候我们借助可选字符?
hiu?t
2.正则表达式的进阶
2.1分组和回溯引用
2.1.1分组
在正则表达式中还提供了一种表达式分组机制,当使用分组时,除了获得整个匹配。还能够中选择每一个分组
分组有一个非常重要的功能,所以被称为捕获分组,用来捕获数据
示例使用分组提取中的数据<p>正则表达式</p>
<p>(.*?)</p>
2.1.2非捕获分组
例如想要匹配两个字母组成的单词或者四个字母组成的单词就可以使用非捕获分组(?:表达式)
2.1.3分组的回溯引用
例如:匹配一段HTML代码,比如可能编写这样一段正则表达式:0123<font>提示</font>abcd
老手法:</w+>.*?<‘/\w+>、
但是很快会发现一个问题:
<font></bat>也会被匹配上,这样需求不会被实现,这时就要需要配分组回溯引用
<\w+>.*?<‘/\1>:通过这个例子\1就代表一个分组,使得前后相同
这样我们只能匹配到一对标签,体中的内容
2.2替换和标记
2.3先行断言
2.3.1正向先行断言
:指在某个位置向右看,表示所在位置右侧必须匹配(?=表达式) 表达式
示例:编写一个:
至少一个大写字母或小写字母,至少一个数子,至少8个字符:
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.{8})
2.3.2反向先行断言
:保证右边不能出现某字符
示例:不是qq邮箱的数据
\w+@(?!qq.com).*
2.4后行断言
2.4.1正向后行断言
指在某个位置向左看,表示所在位置左侧必须能匹配(?<=表达式)
表达式
(?<=王)\S
2.4.2反向后行断言
指在某个位置向左看,表示所在位置左侧不能匹配(?<!表达式)
表达式
请用正则表达式匹配yige$
(?<!\$)\$[^\$]+\$(?!\$)