正则表达式
字符类
1.字符集
[ABC]
匹配集合中的任何字符
正则表达式:
[aeiou]
匹配结果:
glib jocks vex dwarves!
2.非字符集
[^ABC]
匹配不在集合中的任意字符
3.范围
[g-s]
匹配ASCII码在指定范围区间的字符
4.点(.)
.
字符代表匹配任何单个字符,它只能出现在方括号以外,不能匹配换行符,等价于[^\n\r]
5.完全匹配
[\s\S]
可以用来匹配所有字符,包括换行符,但是除了dotall标符(s
).
另外一种形式是[^]
, 但是它不被所有浏览器支持
6.单词
\w
匹配字母、数字、下划线。 只匹配小ASCII码的字符(无声调字母或非罗马英文字符)。 等价于 [A-Za-z0-9_]
7.非词匹配
\W
匹配非字母、数字、下划线。 等价于[^A-Za-z0-9_]
8.数字
\d
匹配任意数字 (0-9). 等价于 [0-9]
9.非数字
\D
匹配任意非数字字符 (0-9). 等价于 [^0-9]
10.空白字符
\s
匹配任何空白字符。(空格, 制表符, 换行符)
11.非空白字符
\S
匹配任何非空白字符。(空格, 制表符, 换行符)
12.Unicode分类
\p{类别}
\p{letter} 在任何一个语言中都表示一个字母。\p{L} 是它的简写形式
主要类别:
字母 L:
- 小写字母
Ll
,修饰语Lm
,大写首字母Lt
,全部大写Lu
,其他Lo
- 小写字母
数字 N:
- 数字
Nd
,字母Nl
,其他No
- 数字
标点 P:
- 连接词
Pc
,中划线Pd
,引号Pi
,引回Pf
,开始Ps
,结束Pe
,其他Po
- 连接词
标记(变音等)M:
- 组合字符(有一定间隔)
Mc
,包围字符(一个或多个字符被另一些字符包围)Me
,组合字符(无间隔)Mn
- 组合字符(有一定间隔)
标志 S:
- 货币
Sc
,修饰符号Sk
,数学Sm
,其他So
- 货币
分隔符 Z:
- 换行符
Zl
,段落Zp
,空格Zs
- 换行符
其他 C:
- 控制符
Cc
,格式符Cf
,未提供的Cn
,非公用的Co
,帮助符Cs
- 控制符
锚定
1.开头
^
匹配字符串开头,或者当使用多行标志(m
)时,匹配一行的开头。 这个会匹配到位置,而不是字符。
2.结尾
$
匹配字符串结尾,或者当使用多行标志(m
)时,匹配一行的结尾。 这个会匹配到位置,而不是字符。
3.词边界
\b
匹配一个单词边界,也就是指单词和空格间的位置。 详情见单词字符类(w
)。
正则表达式:
s\b
匹配结果:
she sells
seashells
4.非词边界
\B
匹配非单词边界。 这个会匹配到位置,而不是字符。
正则表达式:
s\B
匹配结果:
s
he s
ells s
eas
hells
转义符
1.保留字符
\
以下字符含有特殊含义, 应该以\
(反斜杠)为开头,以表示文字字符:
+*?^$.[]{}()|/
在一个字符集中, 只有 \
, -
, 和 ]
需要被转义。
2.tab制表符
\t
匹配 TAB制表符 (字符编码 9)。
3.lf换行符
\n
匹配 LF换行符 (字符编码 10)。
4.纵向制表符
\v
匹配 纵向制表符(VERTICAL TAB) (字符编码 11)
5.换页符
\f
匹配 换页符(FROM FEED) (字符编码 12)
6.cr换行符
\r
匹配 CR换行符 (字符编码 13)
7.空(null)
\0
匹配 空(NULL) (字符编码 0)
区间
1.重复
{N}
在一个字符组后加上{N}
就可以表示在它之前的字符组出现N
次
正则表达式:
\d{4}
匹配结果:
0123
1234
2345
2.重复区间
{M,N},M是下界而N是上界
正则表达式:
\d{3,4}
匹配结果:
123
234
1234
2345
3.开闭区间
{M,}
闭区间不写即可表示匹配一个或无数个
+等价于{1,}
*等价于{0,}
正则表达式:
\d{0,}
匹配结果:
1
12
123
1234
分组
1.捕获分组
()
使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组
文本内容:
0731-8825951
正则表达式:
/(\d{4})-(\d{7})/
分别捕获
0731 8825951
2.通配
(.*?)
<p>hello</p>
正则表达式:
>(.*?)<
hello
3.或者
|
例如要提取所有图片文件的后缀名,可以在各个后缀名之间加上一个 |符号
正则表达式:
/(.(mp4|avi|wmv|rmvb))$/
匹配结果:
1.avi
2.mp4
4.非捕获分组
(?:表达式)
不捕获数据,还能使用分组的功能
5.分组的回溯匹配
\N
引用N编号的分组
匹配文本:
<font>提示<a></a></font>
正则表达式:
/<\w+>(.*?)</\w+>/
匹配结果:
提示<a>
这不是我们想要的结果,我们可以改成
正则表达式:
/<(\w+)>(.*?)</\1>/
匹配结果:
提示<a></a>
断言
先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看
正向先行断言
(?=表达式)
指在某个位置向右看,表示所在位置右侧必须能匹配表达式
匹配文本:
我喜欢你 我喜欢我
正则表达式:
喜欢(?=你)
匹配结果:
我喜欢你 我喜欢我
反向先行断言
(?!表达式)
指在某个位置向右看,保证右边不能符合表达式
正向后行断言
(?<=表达式)
指在某个位置向左看,表示所在位置左侧必须能匹配表达式
反向后行断言
(?<!表达式)
指在某个位置向左看,表示所在位置左侧不能匹配表达式
评论 (0)