【问题标题】:How to capture #define in Ruby?如何在 Ruby 中捕获#define?
【发布时间】:2018-03-04 13:47:08
【问题描述】:

我正在尝试在 Ruby 中创建一个快速的语言解析器。整个过程都正常,我可以用我的新语言成功运行代码,但我无法让 #define 工作。我希望 #define 成为用我奇怪的临时语言创建函数的关键字。

到目前为止,我已经使用正则表达式来标记我的代码,然后我会从那里解析它,转换为 JavaScript,然后将它传递到 node.js 中。

我试过的正则表达式是/\b\#define\b/

知道为什么这不起作用吗?

PS。这是为了我自己的娱乐,我并不是要制作一个高效的解析器。

【问题讨论】:

  • 尝试删除第一个单词边界?
  • @Sweeper 是的,这似乎确实有效。添加了一个 \A 和一个捕获组以满足我的需要。

标签: ruby regex parsing


【解决方案1】:

您应该删除模式开头的\b

#define\b

或将\b 替换为\B

\B#define\b

# 之前有单词字符时,您的原始正则表达式将匹配#define

some word#define

单词边界基本上是一个单词字符,后跟一个非单词字符,反之亦然,不是吗?

如果#之前有单词字符,我认为你想要做的不是匹配#define,所以我建议使用\B

或者,如果您想在行首匹配 #define,请使用 ^ 并打开多行选项。

【讨论】:

    【解决方案2】:

    通过添加 \A 而不是 \b 进行了修复,并添加了捕获组以满足我的需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2013-09-20
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2021-08-19
      相关资源
      最近更新 更多