Lua - 在字符串中查找“标签”?

我打算使用 Lua 模式匹配,除非有更好的方法来实现这个。

我想解析一个字符串并查找“标签”。例如,我想找到字符串中的 '[color=???][/color]' 部分,不在意等号后面是什么,不在意标签中间有什么内容,也不在意它们在字符串中的位置,只要它们在字符串中的 某个地方 出现,并且 'color=' 后面有一个十六进制值。这是一个示例字符串:

mystring = 'Hello, [color=#0026FF]world[/color]!'
--                 ^^^^^^^^^^^^^^^     ^^^^^^^^
点赞
用户3204551
用户3204551

在手册中的模式

第一步,分割令牌:

function split_tag(s, i)
  i = (i or 0) + 1
  local j = s:sub(i, i)
  if j == "" then
    return
  end
  j = s:find(j == "[" and "]" or ".%f[[\0]", i) or #s
  -- 在 Pre-5.2 Lua 中,使用 %z 来代替模式中的 \0
  return j + 1, s:sub(i, j)
end
for k, v in split_tags, 'Hello, [color=#0026FF][bold]world[/bold][/color]!' do
  print(('%q\n'):format(v))
end

因此,您将输入字符串

'Hello, [color=#0026FF][bold]world[/bold][/color]!'

分解成

"Hello, "
"[color=#0026FF]"
"[bold]"
"world"
"[/bold]"
"[/color]"
"!"

括号匹配算法留给读者作为练习。

2014-08-10 16:44:51