单词边界

目的:** 匹配单个单词**

使用元字符\b

作用

1
2
3
4
5
\b到底匹配什么东西呢?正则表达式引擎不懂英语(事实
上,它不懂任何人类语言),也不知道什么是单词边界。简单地
说,\b匹配的是一个这样的位置,这个位置位于一个能够用来构成单
词的字符(字母、数字和下划线,也就是与\w相匹配的字符)和一个
不能用来构成单词的字符(也就是与\W相匹配的字符)之间。

例一

没有使用\b

没有使用\b

使用之后

使用了\b

二、字符串边界

目的对所要匹配的字符串(在一行的)的开头和(一行的)结尾做出限制

使用元字符^$

直接上例子

没有使用^or$并且没有加"?"


仔细分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
首先,"<"匹配第一个字符,随便后的转移之后的"?"匹配第二个字符,xml类似,
重点:
".*"将匹配零个或者多个字符,而这里注意,"."是一个贪婪行字符,
如果其后不加"?"进行修饰为"懒惰型字符",那么会出现意想不到的后果,
上图中
这绝不是我们想要的结果,下图中的第三行"看似没有问题"
如若自己看就会发现,
1.在这一行最后的" and?>"竟然也被匹配了进去!!
2.类似的错误同样出现在倒数第三行。

这就印证了"."这一贪婪型字符它饕餮般的行径(
注意:此处正对应着第五章最后一部分的小知识)

如何解决?加上"?"!

加上了"?"

但是

1
2
3
4
问题并没有得到完美解决,尽管我们匹配出了所有的目标,
但是我们还要求所匹配的字段是: 在一行的开头
也就是说第三、五、六个匹配是本不该被匹配的
即:我们要对模式字符串的一行开头做出限制

而这正是"^"元字符大显身手的时候

注意

1
2
3
4
5
6
7
还记得吗?我们在第3章里已经见识过元字符^了,但那时的
它是一个用来对字符集合进行“求非”操作的元字符。那它还怎么用来
表明一个字符串的开头呢?
^是几个有着多种用途的元字符之一。只有当它出现在一个字符集合
里(被放在[和]之间)并紧跟在左方括号[的后面时,它才能发挥“求
非”作用。如果是在一个字符集合的外面并位于一个模式的开头,^将
匹配字符串的开头。

加上"^"后效果如下图

加上"^"

注意

这里通常写成

1
^\s*xml\?.*?\?>

类似的元字符"$"用来修饰字符串的末尾处

目的标签的后面不应该再有任何实际内容

例子

使用"$"


小结

1
2
3
正则表达式不仅可以用来匹配任意长度的文本块,还可以用来匹配出现
在字符串中特定位置的文本。\b用来指定一个单词边界(\B刚好相
反)。^和$用来指定字符串边界(字符串的开头和字符串的结束)。