限定符
?
: ? 前面字符可出现 0 次 或者 1 次。在上述例子中:? 它前面这个字符 d 需要出现 0 次或者 1 次。即 d 这个字符可有可无。上面例子中,used? 即可匹配 user 也可匹配 used
used?
*
:* 号前面字符可以出现 0 次 或者多次。上述例子中:* 代表 b 可以出现 0 次 或者出现 多次。
ab*c
+
:+ 号前面字符可出现 1 次 以上的字符。ab+c
指定字符出现的次数
指定字符 b 出现 6次
ab{6}c
指定字符 b 出现 2-8 次之间
ab{2,8}c
如果需要指定 字符 b 出现 2 次以上,可以省略 6
ab{2,}c
如果需要匹配多个字符,则可以将需要匹配的字符用小括号括起来再添加限定符。
例1:在下面例子中需要匹配 以 a 开头,a 后面是 ab 并且出现 1 次以上的。
a(ab){1,}
例2:在下面字符中匹配 ab 字符,出现一次,或多次的
(ab)+
“或” 运算符
| : 或 运算符
在下面例子中 匹配,要么是 a cat 或者是 a dog
a (cat|dog)
字符类
匹配 由 abc 三个字符构成的单词
[abc]+表示单词中包含 abc三个字符的都可以匹配到。[] 里的内容代表要求匹配的字符只能取自它们。
可以在 [ ] 里指定范围[a-z]: 代表所有的小写英文字母
[a-zA-Z]: 代表所有的英文字母
[a-zA-Z0-9] : 代表所有的英文字母和数字如果在 [ ] 的起前面加一个
^ (脱字符)则代表要求匹配除了尖号后面列出的【以外】的字符
例如:[^0-9] :代表所有的非数字的字符(包括换行符)
元字符
正则表达式中的大多数元字符都是以反斜杠 \ 开头的
\d :数字字符
\D :非数字字符
\w :单词字符(英文,数字及下划线)
\W :非单词字符
\s :空白符(包含 Tab 和 换行符)
\S :非空白符
. :任意字符,但是不包含换行符
^ :只匹配行首。例:^a 只会匹配行首的a
$ :只匹配行尾。例:a$ 只会匹配行尾的a
贪婪与懒惰匹配
例子:匹配下面内容中的所有HTML标签 和 标签
<span><p>这是一个html标签p>span><.+?>
实例
RGB 颜色值匹配
匹配下面所有的十六进制的颜色值
#[a-zA-Z0-9]{6}\b首先匹配 # ,然后匹配所有字母和数字并且数字和字母组合只能是6个字符,\b 代表单词字符的边界
IPv4 网络地址
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b将ip分为4段,每段可以为,1位,2位或者3位组成如果第一段是以25开头,则第三位必须是0-5之间的数 即 25[0-5],如果第一段是以2开头,第二位是0-4之间的数,那么第三位可以是 0-9之间的数,即 2[0-4]\d \d表示所有的数字字符如果第一段是0或者1开头,那么后两位可以取 00-99之间的任意数字,[01]\d\d,由于ip地址的每一部分都可以是1位数字,2位数字组成或者3位数字组成,所以在第1位和第3位后面字符都加上可以一个?就可以表示这种情况了。[01]?\d\d?数字部分匹配完了之后就是后面的句点,\.组合起来就是 (25[0-5]|2[0-4]\d|[01]?\d\d?)\.将此段匹配3次,就是ip地址的前3段了。((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}第四段,只要将前面的再匹配一次就可以了,不需要匹配句点。(25[0-5]|2[0-4]\d|[01]?\d\d?)最后在首尾加上 \b 来匹配字符边界。最终结果:\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
电话号码
^(13[0-9]|14[5-8]|15[0-9]|16[6-7]|17[5-8]|18[0-9]|19[8])\d{8}$
总结表
限定符
a* a出现0次或多次
a+ a出现1次或多次
a? a出现0次或1次
a{6} a出现6次
a{2,6} a出现2-6次
a{2,} a出现两次以上
或运算符
(a|b) 匹配a或者b
(ab)|(cd) 匹配ab或者cd
字符类
[abc] 匹配a或者b或者c
[a-c] 匹配a或者b或者c
[a-fA-F0-9] 匹配小写和大写英文字符以及数字
[^0-9] 匹配非数字字符
元字符
\d 匹配数字字符
\D 匹配非数字字符
\w 匹配单词字符(英文、数字、下划线
\W 匹配非单词字符
\s 匹配空白符(包含换行符、Tab)
\S 匹配非空白字符
. 匹配任意字符(换行符除外)
\bword\b \b 标注字符的边界(全字匹配)
^ 匹配行首
$ 匹配行尾
贪婪/懒惰匹配
<.> 默认贪婪匹配“任意字符”
<.> 懒惰匹配“任意字符