零宽与非零宽
非零宽字符:能够匹配字符的(特殊)字符。如:\d会匹配一个数字,\s会匹配空白字符
零宽字符:不匹配字符,只标记位置(具体含义见下文)
字符边界
表达式 | 表示含义 |
---|---|
^ | 与字符串开始的地方匹配 |
$ | 与字符串结束的地方匹配 |
\b | 匹配一个单词边界 |
上例表示:匹配以”a”作为字符串开始的位置
上例表示:匹配以”l”作为字符串结尾的位置
关于\b 的理解
初学者往往对\b感到很困惑,一方面是对\b作为位置标识的不习惯,另一方面是对\b所表示的含义不明确,很多教程给的解释也太书面,因此我认为有必要单独将其列出来进行一下说明。
\b匹配的位置:前面和后面的字符不全是\w(字母,数字,下划线,汉字)
反过来理解就是,如果\b的前面和后面都是\w,则不匹配
示例如下:
先不谈匹配的结果,很多人看到这里可能有这样的疑问,不是说\b匹配的是位置吗?怎么最后匹配的字符串呢?要注意,我们只是说\b匹配的是一个位置,而不是说apple也跟着匹配位置,以第一个匹配成功的黄色高亮显示的apple为例
此例中,\b表示的是apple和左边的空格之间的位置。
接下来分析为什么会有这样的匹配:
\b的后边是apple,属于\w,因为\b匹配的位置前后不能全是\w,所以\b之前就不能是\w了,因此只有apple(前边是空格)、apple11(前边是空格)、apple1(前边是空格)符合。
下面将\b放在apple后面进行测试:
结果请读者自己分析。