正则表达式初学

正则表达式在线测试工具:https://regex101.com/


常用限定符

?

前面的字符出现0次或1次

*

前面的字符出现包括0次的任意次

+

前面的字符出现一次以上

{ }

精确匹配

例:

{6}:前面的字符出现6次

{3,6}: 前面的字符出现3到6次

{3,}: 前面的字符出现3次以上


原子组

我的理解是配合限定符修饰使用。

原子即不可分割,限定符的限定作用对对应的一个原子组生效。

(ab){3,6}

这里原子组为(a,b),限定符为{3,6} 匹配连续出现一次及以上的“ab”

如:ab、ababab、ababab…….

常见原子组:

一、用括号括起来的部分

  • (ab)
  • (cat|dog) 表示匹配cat或者dog 注:a(cat|dog){3}这里的限定符{3}只对(cat|dog)作限制。
  • …诸如此类

二、用方括号括起来的部分

方括号括起来的部分表示字符的范围

[abc] :要求匹配的字符只能取自于a、b、c其中任意一个

[a-z]:表示匹配小写字母(从a到z)

[a-zA-Z1-9]:表示匹配大小写字母和数字

在方括号内字符前加上尖括号表示不匹配的字符

[^1-9]:表示所有非数字字符(包括换行符)


元字符

预先定义好的一系列常用字符类型

常用元字符

\d:数字字符

\D:非数字字符

\w:单词字符(所有的英文字符数字上下划线)

\W:非单词字符

\s:空白字符(包含tab字符(制表符)以及所有的换行符)

\S:非空白字符

. :代表任意字符(不包括换行符)

^:匹配行首

$:匹配行尾

\b:代表单词字符的边界


贪婪/懒惰匹配

“?” 能将正则表达式的贪婪匹配转换成懒惰匹配

正则表达式默认会尽可能匹配更多的字符——贪婪匹配

如当我们想匹配某个html标签

<.+>

默认会把以下整个字符串全部匹配

1
<body><div>xxxxxxxxxx</div>></body>

而加上一个 “?”

<.+?>

则只会匹配其中的标签——懒惰匹配