元字符


元字符是在正则表达式中具有特殊含义的符号或字符,正则表达式本质上就是通过元字符实现字符串精准匹配的。接下来,我讲的所有字符都是元字符,下面只是普通的元字符,后面的字符转义,限定符其实本质都是元字符。

代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

^说清楚点就是匹配每一行的开始位置, $匹配的是每一行的结尾位置。只要有了^ ,那就只会匹配每一行开头的字符串,而不会匹配每一行中间的,而$就是匹配每一行结尾的字符串,两个结合到一起,常用于单行字符串的匹配。

反义


反义一般用上面元字符的大写表示,比如\d匹配任意数字,而\D匹配除数字外的所有字符,其他的也一样
对于字符类,下面再讲,使用^来匹配除方框里给出的字符之外的所有字符。

代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

限定符


限定符是跟在其他元字符后面的,用于限定元字符匹配字符的重复次数。

代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

可能有点没理解清楚,那我来举几个例子

  • \d+ :作用是匹配由数字构成的字符串
    \d是匹配数字,+相当于无数个\d,数量取决于什么时候遇到非数字,必须连续
  • \d{1,}:作用和上面一毛一样,也是匹配由数字构成的字符串,只是可以自定义最少有几位,比如\d{3,}表示这个数字至少有三位
  • *相当于{0,}+相当于{1,}?相当于{0,1},后三个只是自定义程度更高,前三个使用更方便

字符转义


当你想搜索元字符本身怎么办,那就在前面加一个\ ,比如说想搜索. ,就需要用\.

字符类


之前说的\w\d\s这些只能匹配任意的字母数字,而不能匹配特定的几个字母或者数字,只需要把你想匹配的装到方括号里,就像[12345]这样,你就能匹配到12345中任意一个数字了,同时你也可以用[1-5]表示。
除了数字,其他的字符,字母都可以这样,并且在方括号里不用担心字符转义的问题,[.*+?$]这些都可以直接匹配。用于反义的^,我们需要使用[\^]
字符数字字母都可以放在一起,比如[0-9A-Za-z] ,直接连在一起就行,相当于\w的效果。

举一个稍微复杂的例子,^[a-zA-Z]\w{5,17}$ ,用正则可视化我们可以看出 这是一个校验密码的表达式,以字母开头,长度为6到18位。下面写的意思是重复4到16次。用^$ 包在一起就表示是单独的一行