限定符

abcd?
//?前面的字符可有可无(0次或者1次),都能被搜到
//可以匹配到abcd、abc
    
ab*d
//*前面的字符可以出现0次或多次
//可以匹配abbbbd、abd、ad等
    
ab+c
//+前面的字符出现1次或者多次
//不匹配ac,匹配abc、abbc等
    
//{}中指定前面字符出现的次数
ab{6}c
//指定b出现次数为6次,即abbbbbbc
ab{2,6}c
//指定b出现次数为2-6次
ab{2,}c
//指定b出现的次数>=2
(ab){3}
//指定ab出现3次
​
(ab)+
//匹配括号内的字符
//匹配ab

或运算符

a (cat|dog)
//匹配a cat 或者 a dog

字符类

[abc]
//匹配a、b、c
[a-z]
//代表查找由小写字母组成的字符
[A-Z]
//代表查找由大写、字母组成的字符
[a-zA-Z0-9]
//代表大小写英文字符和数字
[^a-z]
//除a-z的字以外符组成的字符串

元字符

\d
//匹配数字字符,等同于[0-9]
\D
//非数字字符
\w
//匹配单词字符(英文、数字、下划线)
\W
//匹配非单词字符
\s
//匹配空白符(tab和换行)
\S
//匹配非空白字符
.
//匹配任意字符(不含换行符)
\.
//对.进行转义为单纯的.而不是任意字符
\b
//代表单词字符的边界(全字匹配)
^
//匹配行首
//例如^a只匹配abc,不匹配cba、cab等
$
//匹配行尾
//例如a$只匹配cba,不匹配abc、acb等

贪婪匹配和懒惰匹配

//*+{}在匹配字符串的时候会尽力匹配更多的字符,默认为贪婪匹配
//在匹配中加上?,将贪婪匹配更改为懒惰匹配
<.+>
//默认贪婪匹配任意字符
<.+?>
//懒惰匹配,这样就只会匹配含有<>的字符串

例子

匹配所有16进制RGB值

#[a-fA-F0-9]{6}\b
//因为是16进制RGB所以只可能是a-f、A-F、0-9,且有且仅有6位所以\b来表示字符串的边界

ipv4地址匹配

\d+\.\d+\.\d+\.\d+
//上面这样不能识别ipv4的范围,有可能识别出不合法的ipv4地址
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
//下面是上面版本的改进,可以仔细看下,满足了0.0.0.0~255.255.255.255的要求

本文不包含的内容

捕获、断言、递归、平衡组等

参考、拓展阅读

iHateRegex

正则表达式30分钟入门教程

在线测试工具regex101

10分钟快速掌握正则表达式