正则表达式: 用来描述符合某种模式(具有某种特征)的一类字符串的表达式.
正则表达式的组成
- 普通字符: 即普通的字符 (如abcd!@#$等等,这个不需要介绍)
- 元字符: 具有特殊描述功能的字符 (如.*1|等等,重点是这个)
元字符
元字符主要有以下几类
1.特殊字符(不显示的字符)
元字符 | 含义 |
---|---|
a | 警报 |
退格, 单词边界 | |
e | ESC字符 |
f | 进纸符 |
换行符 | |
回车符 | |
水平制表符 | |
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 | 匹配文本起始位置,即第一行开头 | ||
$ | 匹配 行/字符串 的结尾 | ||
匹配文本结束位置 | |||
单词边界 | |||
B | 非单词边界 | ||
G | 上一次匹配结束的位置 | ||
(?= 指定内容 ) |
肯定顺序环视,匹配指定内容前面的位置 | ||
(?! 指定内容 ) |
否定顺序环视, 匹配非指定内容前面的位置 | ||
(?<=指定内容 ) |
肯定逆序环视, 匹配指定内容后面的位置 | ||
(?<!指定内容 ) |
否定逆序环视,匹配非指定内容后面的位置 | ||
(?<=指定内容1 )(?=指定内容2 ) |
匹配指定内容1 之后,指定内容2 之前的位置 |
把 1234567变成"1,234,567",可以用"(?<=d)(?=(ddd)+(?!d)) "来寻找
,
的位置.
捕获和引用
符号 | 含义 |
---|---|
(指定内容 ) |
捕获括号,指定内容匹配成功后,内容被括号捕获,可以引用 |
1,2, …, | 引用, 指定捕获的组号来引用内容, 组号从1开始 |
(?:指定内容 ) |
非捕获括号, 即使指定内容被捕获, 内容也不参与捕获 |
(?p<指定名字 >指定内容 ) |
给分组命名,引用时用() |
(?>指定内容 ) |
固化分组, 简单来讲一直匹配直到不符合条件,且不归还内容 |
(指定内容1 |
指定内容2 |
对于捕获和引用, 如在串"12345678900"中,
搜索: (d{3})(d{8}) 替换为: 1112 ,其中2为组号 ,结果为"1112345678900"
贪婪模式和非贪婪模式
贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配
非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配.
如在’‘bbb>’'中匹配"<w*>"
贪婪匹配得到: ‘‘bbb>’’; 非贪婪匹配得到: ‘’"
默认匹配为贪婪匹配, 直接使用 *
, +
等符号
非贪婪匹配加"?": 如+?
, *?
在"abbb"中匹配"ab+", 为贪婪匹配, 得"abbb".
在"abbb"中匹配"ab+?", 为非贪婪匹配, 得"ab".
注释和模式修饰词
表示 | 含义 |
---|---|
(?i:指定内容 ) |
匹配指定内容,不区分大小写 |
(?x:指定内容 ) |
宽松排列和注释模式 |
(?s:指定内容 ) |
点号通配模式 |
(?m:指定内容 ) |
增强的行锚点模式 |
(?#指定内容 ) |
注释 |