String Lua-Find“查找”;标签;串串的?
我计划使用Lua模式,除非有更好的方法 我希望能够解析字符串,并查找“标记”。例如,我希望找到字符串的“[color=???][/color]”部分,不关心等号后面的内容,不关心标记之间的内容,也不关心标记在字符串中的位置,只要它们在字符串中的某个位置,并且“color=”后面有一个十六进制值。下面是一个示例字符串:String Lua-Find“查找”;标签;串串的?,string,lua,lua-patterns,String,Lua,Lua Patterns,我计划使用Lua模式,除非有更好的方法 我希望能够解析字符串,并查找“标记”。例如,我希望找到字符串的“[color=???][/color]”部分,不关心等号后面的内容,不关心标记之间的内容,也不关心标记在字符串中的位置,只要它们在字符串中的某个位置,并且“color=”后面有一个十六进制值。下面是一个示例字符串: mystring = 'Hello, [color=#0026FF]world[/color]!' -- ^^^^^^^^^^^^^^^ ^
mystring = 'Hello, [color=#0026FF]world[/color]!'
-- ^^^^^^^^^^^^^^^ ^^^^^^^^
第一步,拆分令牌:
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]"
"!"
标准括号匹配算法留给读者作为练习。-这看起来像是著名的论坛样式标记语言,我不记得它的名称-有没有人为它编写了合适的解析器?我在phpBB上见过它,我认为它叫做phpBB代码标记。不知道它是否有名字。我认为还没有人写过解析器。该死!我可以用其他方法在Lua中查找这些标记吗?您的标记有多复杂?确切的规则是什么?找到它们后你想做什么?请注意,Lua模式不是正则表达式;它们有不同的语法,并且模式比正则表达式弱。@paramagnetic:phpBB是高度特殊的。我不会感到惊讶,论坛引擎中的实际解析器是您试图避免的一大堆正则表达式:)我收到一个错误,上面写着“格式错误(缺少“]”),但
I
是类型number@Deduplicator,我使用的是Lua版本5。1@hjpotter92:该死,太多未经测试的重构了。真管用!我经常打印出“q”,所以我不确定:格式(v)对代码有什么影响。。。