正则表达式
正则表达式: 用来描述符合某种模式(具有某种特征)的一类字符串的表达式.
正则表达式的组成
- 普通字符: 即普通的字符 (如abcd!@#$等等,这个不需要介绍)
- 元字符: 具有特殊描述功能的字符 (如.*1|等等,重点是这个)
元字符
元字符主要有以下几类
1.特殊字符(不显示的字符)
| 元字符 | 含义 |
|---|---|
| \a | 警报 |
| \b | 退格, 单词边界 |
| \e | ESC字符 |
| \f | 进纸符 |
| \n | 换行符 |
| \r | 回车符 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
2.不确定范围的字符组
所谓字符组,就是包含一组特定字符,但只从中选一个.
我的理解是: 在
[]中指定一个范围, 从中任意匹配一个
| 字符 | 含义 |
|---|---|
| [abc] | 匹配一个a,b ,c中的任意一个字符 |
| [a-z] | 匹配一个从a到z中的任意一个字符 |
| [^abc] | 匹配一个非a,b,c中的任意一个字符 |
| [^a-z] | 匹配一个不在a到z之中的字符 |
| [[a-z]-[abc]] | 字符组减法 |
| [[a-z] && [ ^abc]] | 字符组集合运算 |
注意,
普通字符组
[]内其他部分元字符 不起作用,如[.]并不会匹配任意一个字符,而是匹配符号.普通字符组
[]内的\d,\w还是可以使用的普通字符组内要匹配
-,必须写在最前面,如[-abc]
3.确定范围字符组
范围明确,不需要你指定的字符组, 返回一个满足条件的字符
| 符号 | 含义 |
|---|---|
| . | 匹配任意字符 |
| \d | 匹配一个数字 |
| \D | 匹配一个非数字 |
| \w | 匹配一个单词字符, 即一个数字或字母 |
| \W | 匹配一个非单词字符 |
| \s | 匹配一个空白字符 |
| \S | 匹配一个非空白字符 |
4.限定(数量)字符
不匹配任意一个字符,放在匹配表达式后面,用来描述前面表达式的数量
| 字符 | 含义 | 举例 | 例子解释 |
|---|---|---|---|
| * | 匹配前面的子表达式零次或多次,即 | a* | a出现0次或多次 |
| + | 匹配前面的子表达式一次或多次 | a+ | a至少出现一次 |
| ? | 匹配前面的子表达式零次或一次 | a? | a出现一次或者不出现 |
| {n} | 匹配确定的 n 次 | a{5} | a必须出现5次 |
| {n,} | 至少匹配 n 次 | a{99,} | a至少出现99次 |
| {n,m} | 最少匹配 n 次且最多匹配 m 次 | a{5,10} | a出现5到10次 |
5.位置元字符
| 字符 | 含义 | ||
|---|---|---|---|
| ^ | 匹配 行/字符串 开始的位置 | ||
| \A | 匹配文本起始位置,即第一行开头 | ||
| $ | 匹配 行/字符串 的结尾 | ||
| \Z | 匹配文本结束位置 | ||
| \b | 单词边界 | ||
| \B | 非单词边界 | ||
| \G | 上一次匹配结束的位置 | ||
(?= 指定内容 ) |
肯定顺序环视,匹配指定内容前面的位置 | ||
(?! 指定内容) |
否定顺序环视, 匹配非指定内容前面的位置 | ||
(?<=指定内容) |
肯定逆序环视, 匹配指定内容后面的位置 | ||
(?<!指定内容) |
否定逆序环视,匹配非指定内容后面的位置 | ||
(?<=指定内容1)(?=指定内容2) |
匹配指定内容1之后,指定内容2之前的位置 |
把 1234567变成"1,234,567",可以用"(?<=\d)(?=(\d\d\d)+(?!\d)) "来寻找
,的位置.
捕获和引用
| 符号 | 含义 |
|---|---|
(指定内容) |
捕获括号,指定内容匹配成功后,内容被括号捕获,可以引用 |
| \1,\2, …,\n | 引用, 指定捕获的组号来引用内容, 组号从1开始 |
(?:指定内容) |
非捕获括号, 即使指定内容被捕获, 内容也不参与捕获 |
(?p<指定名字>指定内容) |
给分组命名,引用时用() |
(?>指定内容) |
固化分组, 简单来讲一直匹配直到不符合条件,且不归还内容 |
(指定内容1 |
指定内容2 |
对于捕获和引用, 如在串"12345678900"中,
搜索: (\d{3})(\d{8}) 替换为: 111\2 ,其中\2为组号 ,结果为"1112345678900"
贪婪模式和非贪婪模式
贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配
非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配.
如在’‘bbb>’'中匹配"<\w*>"
贪婪匹配得到: ‘‘bbb>’’; 非贪婪匹配得到: ‘’"
默认匹配为贪婪匹配, 直接使用 * , + 等符号
非贪婪匹配加"?": 如+?, *?
在"abbb"中匹配"ab+", 为贪婪匹配, 得"abbb".
在"abbb"中匹配"ab+?", 为非贪婪匹配, 得"ab".
注释和模式修饰词
| 表示 | 含义 |
|---|---|
(?i:指定内容) |
匹配指定内容,不区分大小写 |
(?x:指定内容) |
宽松排列和注释模式 |
(?s:指定内容) |
点号通配模式 |
(?m:指定内容) |
增强的行锚点模式 |
(?#指定内容) |
注释 |

浙公网安备 33010602011771号