正则表达式


一、正则表达式

​ 简单理解正则表达式就是用来匹配一段字符串中自己想要的部分的匹配规则,从一段长字符串中抽取想要的关键信息

1、字符组

​ 字符组用[]括起来。在[]中出现的内容会被匹配,例如[abc]匹配a或b或c,字符组内容过多时还可以使用-,例如[a-z]表示a到z之间所有小写字母,[0-9]表示匹配0到9的所有阿拉伯数字

2、简单元字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.	匹配除了换行符以外的任意字符
\w 匹配字母、数字、下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符

^ 匹配字符串的开始
$ 匹配字符串的结尾

\W 匹配非 字母、数字、下划线(和\w相反)
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符 的所有字符

3、量词

控制前面的元字符出现的次数

1
2
3
4
5
6
*	重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

4、惰性匹配与贪婪匹配

​ 量词中的?、*、+、{}都属于贪婪匹配,就是尽可能多的匹配到结果

1
2
3
4
5
例如:
str: 玩儿吃鸡游戏, 晚上一起上游戏, 干嘛呢? 打游戏啊
reg: 玩儿.*游戏

此时匹配的是: 玩儿吃鸡游戏, 晚上一起上游戏, 干嘛呢? 打游戏

​ 在使用.*后面如果加了?则是表示尽可能少匹配,表示惰性匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
str: 玩儿吃鸡游戏, 晚上一起上游戏, 干嘛呢? 打游戏啊
reg: 玩儿.*?游戏

此时匹配的是: 玩儿吃鸡游戏

str: <div>胡辣汤</div>
reg: <.*>
结果: <div>胡辣汤</div>

str: <div>胡辣汤</div>
reg: <.*?>
结果: 
    <div>
    </div>

str: <div>胡辣汤</div><span>饭团</span>
reg: <div>.*?</div>
结果:
    <div>胡辣汤</div>

.*?x的含义,找到最近的x

1
2
3
str: abcdefgxhijklmn
reg: .*?x
结果:abcdefgx

5、分组

在正则中使用()进行分组. 比如. 我们要匹配一个相对复杂的身份证号. 身份证号分成两种. 老的身份证号有15位. 新的身份证号有18位. 并且新的身份证号结尾有可能是x.

1
2
3
4
身份证号  15位, 18位
^[1-9]\d{13,16}[0-9x]$
^[1-9]\d{14}(\d{2}[0-9x])?$ √
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

最后,推荐一个可以练习正则表达式的网站正则表达式在线测试 - 站长工具 (chinaz.com)

量词


文章作者: gzh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 gzh !
  目录