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

时间:2014-08-10 15:33:25

标签: string lua lua-patterns

我计划使用Lua模式,除非有更好的方法。

我希望能够解析一个字符串,并寻找"标签"。例如,我想找到' [color = ???] [/ color]'字符串的一部分,不关心等于之后的内容,不关心标签之间的内容,而不关心字符串中的位置,只要它们在字符串中某处,那个' color ='之后有一个十六进制值。这是一个示例字符串:

mystring = 'Hello, [color=#0026FF]world[/color]!'
--                 ^^^^^^^^^^^^^^^     ^^^^^^^^

1 个答案:

答案 0 :(得分:4)

Patterns in the manual

第一步,拆分令牌:

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
  -- In Pre-5.2 Lua use %z instead of \0 in the pattern
  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]"
"!"

标准括号匹配算法留给读者练习。