本文基于:10分钟快速掌握正则表达式_哔哩哔哩_bilibili
Regular Expression
限定符
used?
use a used variable name is illegal.
? 将匹配该符号前面的字符 0 次或 1 次.
ab*c
ac
abc
abbbbbbc
adc
addddddc
* 表示其前面的内容可以没有, 也可以出现多次
这里没有使用括号, 所以只会匹配一个字符, * 前面的字符是 b
ab+c
ac
abc
abbbbbbc
adc
addddddc
+ 会匹配出现 1 次及以上的字符, 这里的第一项 ac 没有出现 b 所以没有匹配.
ab{6}
ac
abc
abbbbbbc
adc
addddddc
{}可以匹配括号内的数字对应的次数, {} 还可以指定范围, 例如 : {2, 6} 表示出现的次数在 2~6 次之间 ( 包括 2 和 6 ) .
如果需要限定字符出现的次数在 2 次以上, 则可以省略这里的 6 , 写成 {2,}
多次匹配
(ab)+
ac
abc
abbc
abababac
adc
addddc
基本语法是使用 () 括起来.
"或"运算
a (cat|dog)
a cat
a dog
a bird
前面先匹配单个字符 a , 再匹配 cat 或 dog
如果不加括号 () 的话 :
a cat|dog
a cat
a dog
a bird
则会匹配 a cat 或 dog
字符类
[abc]+
abc
tiger
aabbcc
dog
如上例子表示匹配由 a b c 组成的单词, + 表匹配一次及以上.
[a-z]: 匹配小写字母[A-Z]: 匹配大写字母[0-9]或\d: 匹配数字[a-zA-Z0-9]: 匹配大写字母、小写字母、数字
反匹配
[^0-9]: 匹配除数字之外的字符
元字符
-
\w: 单词字符 ( 英文, 数字, 下划线) -
\s: 空白符 ( 包含Tab和换行符 )
-
\D: 非数字字符 -
\W: 非单词字符 -
\S: 非空白字符
-
.: 任意字符 ( 不包含换行符 )
行首及行尾
^a: 匹配行首的aa$: 匹配行尾的a
贪婪与懒惰匹配
举一个例子, 例如我们想匹配如下句子的 html标签,
会自然想到使用 <.+> 来进行匹配 :
<span><b>This is a sample text</b></span>
会发现里面的所有内容都被匹配了, 因为正则表达式会将 <span> 标签的 < 与结尾 </span> 标签的 > 进行匹配, 所以会出现这种情况.
这时我们只需要将 <.+> 改为 <.+?>
这步操作会将默认的 贪婪匹配 模式切换为 懒惰匹配
<span><b> This is a sample text </b></span>
其他
-
\b(bword) 表示字符边界, 例如 :er\b会匹配nerver中结尾的两个字符er而不会匹配中间所出现的er -
\.: 匹配.
示例
匹配16进制颜色值
#[a-fA-F0-9]{6}\b
#00
#ffffff
#ffaaff
#00hh00
aabbcc
#000000
#ffffffff
IPv4地址匹配
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b