首先推荐一个regex在线校验链接: https://regex101.com/.
一、限定符:
限定符都是作用在符号前面的字符或字符串
1.?
?
表示?前面的字符可出现0次或者1次,如:user?
可以匹配 use
与 user
2.*
*
表示*
前面的字母可出现0-n个,如:ab*c
可以匹配ac、abc、abbbc
3.+
+
表示+
前面的字母可出现1-n个,与*的区别在于,*可以匹配0个,如:ab+c
可以匹配abc、abbbc
但是不可以匹配ac
4.{n}
{2}
表示{2}
前面出现n次,如:ab{2}c
只可以匹配abbc,不可以abc、abbbc
{2,6}
表示{2,6}
前面的字母只能出现2-6次,如:ab{2,6}c
只可以匹配abbc、abbbc
等
{2,}
表示{2,}
前面的字母只能出现大于等于2次,如:ab{2,}c
只可以匹配abbc、abbbc
等
5.(abc)+多字符匹配
(abc)+
表示+
前面的字母串abc可出现1-n个,与*的区别在于,*可以匹配0个,如:(abc)+c
可以匹配abc、abcabccc
二、或 运算:
1.a(apple|banana) 或|
可以匹配aapple、abanana
,注意括号不可少,如果去掉aapple|banana
,则是要么aapple
要么banana
三、字符类
1.[abc]+
表示构成只能来自[]
内的字母,可以匹配aaaabbbcc、cacbaaa
2.[a-z]+
[a-z]+表示构成只能来自a-z
内的小写字母,可以匹配aaaabbbcc、cacbaaa
[a-z0-9A-Z]+表示构成能来自a-z
内的小写字母0-9内的数字A-Z内的大写字母,可以匹配aaaabbbcc、cacbaaa123A
等
3.[^a-z]+
[^a-z]+
表示构成不能来自a-z
内的小写字母,换行符也算,不可以匹配aaaabbbcc、cacbaaa
[^a-z0-9A-Z]+
表示构成不能来自a-z
内的小写字母0-9内的数字A-Z内的大写字母,所以只能匹配标点符号等
四、元字符
正则里面的大多数元字符以\
开头,注意是向右
\d
代表数字字符,等同于[0-9]
\w
代表所有英文字符、数字、下划线
\s
代表空白符,包括tab、换行符、空格
\D
代表非数字字符,等同于[^0-9]
\W
代表所有非 英文字符、数字、下划线
\S
代表非空白符,包括tab、换行符、空格
\b
表示单词边界
.
表示任意字符但不包括换行符
^
表示行首,如^a只会匹配 行abccc、行asss,不匹配行sasd
$
表示行尾,如a$只会匹配行bccca、行asssa,不匹配行asasd
五、贪婪与懒惰匹配
举例: < select >666< /select >
贪婪匹配: <.+>
默认会匹配全部< select >666< /select >
懒惰匹配:只需在+
后面加上个?
即:<.+?>
这只会匹配< select >、< /select >
六、实例
1.匹配颜色
#[a-fA-F0-9]{6}\b
2.匹配ip
\b\d+\.\d+\.\d+\.\d+\b //不完美
\b[0-255]+\.[0-255]+\.[0-255]+\.[0-255]+\b //不完美
\b((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d\d?)\b //完美