元字符
元字符是在正则表达式中具有特殊含义的符号或字符,正则表达式本质上就是通过元字符实现字符串精准匹配的。接下来,我讲的所有字符都是元字符,下面只是普通的元字符,后面的字符转义,限定符其实本质都是元字符。
| 代码 | 说明 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \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次。用^$ 包在一起就表示是单独的一行
