使用Lua解析代码语法?

假设我有一个字符串如下:

the quick [color=brown]brown[/color] fox [color=green]jum[/color]p[color=yellow]e[/color]d over the lazy dog

有什么好的方式可以浏览它并将所有内容放入一个数组中,每当文本在一个 [color] 标记的边界内时,它将有该颜色标签? 所以单词'jumped'会像这样:

[color=green]j[/color]
[color=green]u[/color]
[color=green]m[/color]
p
[color=yellow]e[/color]
d

其中每一行都是索引中的新实例。

目前,我正在尝试通过大量解析来完成这项工作,这是我认为非常混乱的方式...

点赞
用户1847592
用户1847592
local input_string = 'the quick [color=brown]brown[/color] fox [color=green]jum[/color]p[color=yellow]e[/color]d over the lazy dog'

;('[/color]'..input_string):gsub('(%b[])([^[]*)',
   function(tag, text)
      for c in text:gmatch'.' do
         print(tag == '[/color]' and c or tag..c..'[/color]')
      end
   end
)

将上述 Lua 代码翻译成中文,并保留原始的 Markdown 格式:

该 Lua 代码用于处理输入的字符串 input_string,其中包含了一些定义了颜色的标记 [color][/color]。代码的主要功能是将 [color][/color] 标记之间的文本提取出来,然后在每个字符前添加对应的颜色标记,最后输出结果。具体的方式是使用了 gsub() 方法进行替换。

gsub() 方法的第一个参数中,通过 %b[] 匹配到了所有的 [color]...[/color] 标记;然后将每个标记中间的文本通过第二个参数传递给一个匿名函数进行处理。在该函数中,通过 for 循环逐一提取出文本中的每一个字符,并在每个字符上添加对应的颜色标记,最后输出结果。

2014-05-07 08:38:57