【问题标题】:Applying quantifier to a sentence in Lua pattern将量词应用于 Lua 模式中的句子
【发布时间】:2016-10-21 04:52:23
【问题描述】:

所以我尝试使用 Lua 模式从 C 文件中解析出 #define 语句,但在多行定义中存在这种情况,您可能会使用反斜杠转义换行符。

为了让我知道定义在哪里结束,我需要能够将backslash + linebreak 定义为一个字符,这样我才能得到它的补码,然后在其上使用* 量词并然后计数直到第一个非转义换行符。

我该怎么做?

【问题讨论】:

  • 您无法使用 Lua 模式量化序列。但是,您可以先用一些临时值替换序列,然后运行收集您需要的匹配项,然后进行后处理来解决它。

标签: lua pattern-matching lua-patterns luajit


【解决方案1】:

您不能简单地将所有出现的"\\\n" 替换为某个临时符号,因为在以下示例中,"c\\\\\n" 行会出现问题。
相反,您应该为 C 源文件实现迷你扫描器:

local str = [[
#define x y
#define a b\
c\\
d();
#define z
]]

-- Print all #defines found in the text
local line = ""
for char in str:gmatch"\\?." do
   if char == "\n" then
      if line:sub(1, #"#define") == "#define" then
         print(line)
      end
      line = ""
   else
      line = line..char
   end
end

输出:

#define x y
#define a b\
c\\
#define z

【讨论】:

    猜你喜欢
    • 2016-06-13
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多