Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Lua-Find“查找”;标签;串串的?_String_Lua_Lua Patterns - Fatal编程技术网

String Lua-Find“查找”;标签;串串的?

String Lua-Find“查找”;标签;串串的?,string,lua,lua-patterns,String,Lua,Lua Patterns,我计划使用Lua模式,除非有更好的方法 我希望能够解析字符串,并查找“标记”。例如,我希望找到字符串的“[color=???][/color]”部分,不关心等号后面的内容,不关心标记之间的内容,也不关心标记在字符串中的位置,只要它们在字符串中的某个位置,并且“color=”后面有一个十六进制值。下面是一个示例字符串: mystring = 'Hello, [color=#0026FF]world[/color]!' -- ^^^^^^^^^^^^^^^ ^

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

我希望能够解析字符串,并查找“标记”。例如,我希望找到字符串的“[color=???][/color]”部分,不关心等号后面的内容,不关心标记之间的内容,也不关心标记在字符串中的位置,只要它们在字符串中的某个位置,并且“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)对代码有什么影响。。。