regex - 正则表达式中\b和\B之间的区别

标签 regex

我正在读一本关于正则表达式的书,我遇到了 \b 的这个示例:

The cat scattered his food all over the room.

使用正则表达式 - \bcat\b 将匹配单词 cat,但不匹配 scattered 中的 cat

对于\B,作者使用以下示例:

Please enter the nine-digit id as it

appears on your color - coded pass-key.

使用正则表达式 \B-\B 匹配单词 color - coded 之间的 -。另一方面,使用 \b-\bnine-digitpass-key 中的 - 匹配。

为什么在第一个示例中我们使用 \b 来分隔 cat 而在第二个示例中使用 \B 来分隔 - ?在第二个示例中使用 \b 的作用与之前的作用相反。

请向我解释一下其中的区别。

编辑:另外,有人可以用一个新的例子来解释一下吗?

最佳答案

困惑源于你的思维\b匹配空格(可能是因为“b”暗示“空白”)。

\b匹配单词开头或结尾处的空字符串。 \B匹配不在单词开头或结尾的空字符串。这里的关键是“-”不是单词的一部分。所以<left>-<right>匹配\b-\b因为 - 的两侧都有单词边界。另一方面对于<left> - <right> (注意空格),破折号两侧没有单词边界。单词边界向左和向右各一格。

另一方面,当搜索\bcat\b时单词边界表现得更直观,它符合预期的“cat ”。

关于regex - 正则表达式中\b和\B之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6664151/

相关文章:

正则表达式递归 : Nth Subpatterns

python - 连续大写字母正则表达式

regex - 在Linux上重命名多个文件

python - 正则表达式 Python - 从文本文件中绘制数据

regex - 如何使用正则表达式将字符串转换为不同的子字符串?

C#,如何使对象重新初始化自身?

python - 类型错误 : expected string or bytes-like object and works on server but not on PC

python - 使用 python 在文件中保留两个表达式(不包括)之间的连线

r - 在 R 中,如何删除最后一个斜杠之前的所有内容

swift - 避免以逗号分隔的双字母单词列表中的重复项