正则表达式
- 正则表达式的在线测试工具:学习、构建 和 测试 正则表达式
- 正则表达式练习网站:编程胶囊
入门
字符组 []
允许匹配一组可能出现的字符:例如我们想匹配Python和python可以使用:[Pp]ython
区间 -
为了匹配一串区间,比如数字区间:我们使用[0-9]
来匹配,使用[a-z]
来匹配小写字母
特殊字符
如果我们想匹配-则需要使用转义字符\
来匹配 ,例如[\-]
来匹配-字符
取反 ^
如果我们想匹配非数字可以[^0-9]
一些快捷匹配字符
实例 | 描述 |
. |
匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
? |
匹配一个字符零次或一次,另一个作用是非贪婪模式 |
+ |
匹配1次或多次 |
* |
匹配0次或多次 |
\b |
匹配一个长度为0 的子串 |
\d |
匹配一个数字字符。等价于 [0-9]。 |
\D |
匹配一个非数字字符。等价于 [^0-9]。 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S |
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w |
匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W |
匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。 |
匹配开头和结尾 ^ $
例如:有一段python 123456 python 我们匹配开头的python, ^python
如果想匹配python结尾的则使用python$
任意字符 .
. 代表字符匹配任意的单个字符,只能出现在[]外面
可选字符 ?
?表示某个字符,可以是一个字符,字符组或者其他的基本单元,表示该字符出现一次或者0次
匹配多个数据
- 在一个字符组后加上
{N}
就可以表示在它之前的字符组出现N
次。 - 如果我们想要一个数字出现
a-b
次数,则使用{a,b}
来匹配,在后面加?会优先匹配有a次数的
开闭区间
- 如果没有边界则使用
\d{1,}
用来匹配一个或者无数个 - 使用
+
可以匹配1到无数个 - 使用
*
可以匹配0到无数个
基础总结
实例 | 描述 |
[Pp]ython |
匹配 “Python” 或 “python”。 |
rub[ye] |
匹配 “ruby” 或 “rube”。 |
[abcdef] |
匹配中括号内的任意一个字母。 |
[0-9] |
匹配任何数字。类似于 [0123456789]。 |
[a-z] |
匹配任何小写字母。 |
[A-Z] |
匹配任何大写字母。 |
[a-zA-Z0-9] |
匹配任何字母及数字。 |
[^au] |
除了au字母以外的所有字符。 |
[^0-9] |
匹配除了数字外的字符。 |
进阶
分组
- ()提取数据:可以使用
<p>(.*)</p>
提取p标签中的数据 - |或者:可以使用(.jpg | .gif) 提取.jpg或者.gif
- (?:表达式):表示使用分组功能但是不捕获数据
- 分组回溯引用:\N 可以表示引用标号为N的分组,例如我们可以使用
([a-z])([a-z])[a-z]*\2\1
来匹配形式如ab
开头,结尾为ba
的词组。
分组部分可以到编程胶囊去联系和观看具体的示例,这个网址写的是非常详细和完备的。
断言
很多人也称先行断言和后行断言为环视,也有人叫预搜索,其实叫什么无所谓,重要的是知道如何使用它们!
先行断言
- 正向先行断言
正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式
(?=.*?[a-z])(?=.*[A-Z])(?=.*?[0-9]).{8,}使用这个可以匹配至少一个大写字母一个小写字母一个数字且至少8个字符的密码强度判断。
- 反向先行断言
反向先行断言(?!表达式)的作用是保证右边不能出现某字符。
后行断言
- 正向后行断言
正向后行断言:(?<=表达式)
指在某个位置向左看,表示所在位置左侧必须能匹配表达式
- 反向后行断言
反向后行断言:(?<!表达式)
,指在某个位置向左看,表示所在位置左侧不能匹配表达式
断言部分可以到编程胶囊去联系和观看具体的示例。