跳转到主要内容
模块 3 · 第 2 课(共 4)课程中的10/32~10 min
模块课程(2/4)

字边界:`\b` `\B`

\b 是一个 单词边界锚:它匹配 a 之间的 位置 单词字符 (\w) 和非单词字符 (\W, 或 字符串)。与 ^ 和 $ 一样,它不消耗字符。

Code
Pattern: \bgatto\b
Sample:  Il gatto e la gattina giocano.
            ^^^^^

gatto 仅作为整个单词匹配:在 gattina 序列内 gatto 不存在(最后的 o 丢失),但它不匹配 gatti 要么因为最后的 i 是一个单词字符。

\B 是 相反:它匹配不是单词的位置 边界。

寻找“完整的单词”

\b 最典型的用法是“仅在孤立时匹配单词 X,而不是 作为另一个词的一部分”:

Code
\bif\b   matches 'if' but not 'sniff', 'gift', 'lifetime'.

单词边界和非单词字符

边界 \\b 不匹配任何物理字符;这是一个位置测试。 \\b 边界存在于 \\w 字符和非 \\w 字符(或文本的开头/结尾)之间。否定 \\B 断言当前位置不是字边界。

尝试一下

锻炼#regex.m3.l2.e1
尝试:0加载中...

查找整个单词“cat”的每个出现位置(不区分大小写)。它不能匹配“category”、“concatenate”、“scatter”。

正在加载编辑器...
显示提示

将 'cat' 包裹在两个 \\b: 开始处的边界和结束处的边界之间。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m3.l2.e2
尝试:0加载中...

查找不属于标识符的每个整数(例如 `42` 是的,但既不是 `var42` 也不是 `42abc`)。两边都使用“\\b”。

正在加载编辑器...
显示提示

\\b\\d+\\b 仅匹配“孤立的”数字序列。 abc42 在 42 之前有“c”(单词)。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m3.l2.e3
尝试:0加载中...

Find the sequence `cat` only if it starts a longer word, excluding when it appears as a whole word or at the end (e.g. match `catalog` but not `wildcat` or isolated `cat`).

正在加载编辑器...
显示提示

在 cat 的开头(字边界)使用 \\b,在结尾(非字边界)使用 \\B。

3 次尝试后可用的解决方案