正则表达式

173 阅读2分钟

本文基于: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 次之间 ( 包括 26 ) .

如果需要限定字符出现的次数在 2 次以上, 则可以省略这里的 6 , 写成 {2,}


多次匹配

(ab)+

ac
abc
abbc
abababac
adc
addddc

基本语法是使用 () 括起来.

"或"运算

a (cat|dog)

a cat
a dog
a bird

前面先匹配单个字符 a , 再匹配 catdog

如果不加括号 () 的话 :
a cat|dog

a cat
a dog
a bird

则会匹配 a catdog

字符类

[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 : 匹配行首的 a
  • a$ : 匹配行尾的 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