【问题标题】:Regex: Confusion about \b behavior正则表达式:对 \b 行为的困惑
【发布时间】:2018-11-04 02:02:36
【问题描述】:

我正在为 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_] 和非单词字符之间的转换。但是$ 是非单词字符,而0 是单词字符。所以把它放在 ($|0x) 前面只会匹配 $ 如果它前面是一个单词字符。

标签: regex coffeescript atom-editor


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多