将量词应用于 Lua 模式中的句子
Applying quantifier to a sentence in Lua pattern
所以我尝试使用 Lua 模式从 C 文件中解析出 #define
语句,但在多行定义中存在这种情况,您可能会使用反斜杠转义换行符.
为了让我知道定义结束的位置,我需要能够将 backslash + linebreak
定义为单个字符,这样我就可以获得它的补码,然后使用 *
量词,然后计数直到第一个非转义换行符。
我该怎么做?
您不能简单地将所有出现的 "\\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
所以我尝试使用 Lua 模式从 C 文件中解析出 #define
语句,但在多行定义中存在这种情况,您可能会使用反斜杠转义换行符.
为了让我知道定义结束的位置,我需要能够将 backslash + linebreak
定义为单个字符,这样我就可以获得它的补码,然后使用 *
量词,然后计数直到第一个非转义换行符。
我该怎么做?
您不能简单地将所有出现的 "\\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