限定符
?
代表前面一个字符出现0次或1次
例子:dj?
d 匹配
dj 匹配
djjj 不匹配
*
代表前面一个字符可以出现0次或任意次
例子:abc
ac 匹配
abc 匹配
abbbc 匹配
adc 不匹配*
+
代表前面一个字符出现1次及以上
例子:ab+c
ac 不匹配
abc 匹配
abbbc 匹配
adc 不匹配
限定字符出现次数
ab{3}c 代表b出现3次
ab{3,6}c 代表b出现3到6次
ab{3,}c 代表b出现3次及以上
想同时对多个字符限定时用括号括起来
a(bc){2}d 代表bc出现2次
或运算
|
匹配两者中的任意一个
例子: a (lot|llittle)
a lot 匹配
a little 匹配
a apple 不匹配
字符类
[ ]
匹配的字符只能取自[ ]中的字符
例子:
[abc]+ 只能匹配由abc中的字母组成的字符串
[a-z]+ 只能匹配小写字母组成的字符串
[a-zA-Z0-9]+ 只能配小写字母大写字母数字0到9组成的字符串
^ 代表要求匹配除尖号后面列出的以外的字符
[^0-9] 只能匹配非数字字符
元字符
\d
代表数字字符
相当于[0-9]
\w
代表单词字符,即所有英文字符加数字加下划线
\s
代表空白符
同时包含 Tab字符和换行符
\D
代表非数字字符
\W
代表非单词字符
\S
代表非空白字符
.
代表任意字符
但不包括换行符
^匹配行首 $匹配行尾
^a 只会匹配行首的a
b$ 只会匹配行尾的b
贪婪与懒惰匹配
例子: <.+>
字符串:<span><b>This is a test</b></span>
这将会匹配整个字符串 因为<也在任意字符范围内 所以默认贪婪匹配将匹配整个字符串
例子: <.+?>
字符串:<span><b>This is a test</b></span>
加了?后会将贪婪匹配切换为懒惰匹配
结果如下
实例部分
1.匹配RGB颜色值
#[a-fA-F0-9]{6}\b
#号开头
颜色值只能包含a-f A-F 0-9这些字符 且只有6位
末尾加入\b来代表单词字符的边界
提示:不加\b的话 #ffffffffff也会匹配成功
2.匹配IP地址
((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
先匹配一段
如果是25开头,第三个只能是0-5中的数字
如果是20到24开头,第三个可以是任意数字
如果是0或1开头,第二个和第三个可以是任意数字
由于位数可以是1位或两位所以写成[01]?\d\d?或[01]?\d?\d
在数字后面加上点号.
重复三次
最后再来一组和前面一样规则的数字
总结