正则表达式:对 \b 行为的混淆

Regex: Confusion about \b behavior

我正在为 Atom 编辑器编写自己的语法。它使用正则表达式来识别应该突出显示的代码。

我想用两种格式突出显示十六进制数字:

$affe     // hex number with ampersand
0xeffa    // hex number with 0x

所以我想到了这个正则表达式:

($|0x)[A-Fa-f0-9]+

非常简单,这很好用。问题是这也会突出显示 t0x0t 中的 0x0 之类的内容。所以我将正则表达式修改为

\b($|0x)[A-Fa-f0-9]+\b

现在,这个正则表达式将只匹配 0xeffa 但不匹配 $affe 或任何其他以 $ 为前缀的数字 - 这是为什么?我发现 this answer 似乎是一个类似的问题。我认为这是因为 $ 是一个非单词字符。有没有办法修改此正则表达式,使其同时匹配 0xeffa$affe 但不匹配 t0x0t 中的 0x0

我尝试过的一个解决方案是为每种情况简单地编写两个单独的正则表达式 - 它有效但它似乎以某种方式破坏了正则表达式的目的。

您应该更改 \b 适用位置:

($|\b0x)[A-Fa-f0-9]+\b

否则 \b$ 之前,引擎期望集合 [a-zA-Z0-9_] 中的单词字符出现在 $ 之前,即 a$af00