正则表达式

限定符

?

表示?前面的字符出现一次或0次,意思是?前的字符可有可无

例如:used? 表示d可以出现0次或1次


*

可以匹配0个或多个字符

例如:ab*c 表示b可以出现0次或多次


+

可以匹配出现一次或一次以上的字符

例如:ab+c 表示b可以出现1次或1次以上


{}

{a} 可以进行精确的匹配a次

{a,b}可以匹配字符的次数为a到b次

例如:指定b出现的次数为6 可以写 ab{6}c

​ 指定b出现的次数为2到6次 可以写ab{2,6}c


匹配多个字符

()

例如(ab)+,表示ab出现1次或1次以上


或运算符

|

例如a-(cat|dog) , 会匹配到 a-cat和a-dog

如果去掉(), 就会变成a-cat|dog,则会匹配到a-cat和dog

所以括号必不可少


字符类

例如

[abc]+ 方括号里的内容代表要求匹配的字符只能取自它们

可以在方括号里指定字符的范围

[a-z]代表所有的小写英文字符

[a-zA-z]代表所有的英文字符

[0-9]代表所有的数字


^

如果在方括号的前面写上一个^,则代表要求匹配出了尖号后面列出的以外的字符

例如:[^0-9]代表所有的非数字字符(包括换行符)


元字符

\d

代表数字字符

\w

代表单词字符,也就是所有的英文字符,数字和下划线

\s

代表空白符,包含(tab字符和换行符)

\D

代表非数字字符

\W

代表非单词字符

\S

代表非空白字符

.

代表所有字符,但不包括换行符 例如:.*

^

会去匹配行首

例如^a会去匹配行首的a

$

会去匹配行尾

例如a$会去匹配行尾的a


贪婪与懒惰匹配

?

将正则表达式中的贪婪匹配转换成正则匹配

例如

想要匹配 This中的html标签,我们会想到使用<.+>,

但这会匹配整个字符串,原因是因为.+会匹配尽可能多的字符,

因此,使用<.+?>就可以正确匹配了


在表达式末尾加入\b表达单词字符的边界

image-20240407203336705

模式修正符

在这里插入图片描述

举例说明正则符号的定义方式:

1
2
3
4
5
6
7
8
例子						说明
/中间写正则/ 正确
$中间写正则$ 正确
%中间写正则% 正确
^中间写正则^ 正确
@中间写正则@ 正确
(中间写正则) 错误 /\//
A中间写正则A 错误

表示边界

img

匹配分组

在这里插入图片描述