在c++ /Qt中拆分Lua函数调用的混合字符串/数字参数列表

Splitting a mixed string/number argument list of a Lua function call in C++/Qt

本文关键字:字符串 混合 数字 参数 列表 Lua Qt c++ 拆分 函数调用      更新时间:2023-10-16

我想用Qt(4.8)解析c++中Lua函数调用的参数列表,以避免对Lua解释器的依赖。可以假设以逗号分隔的参数列表仅由字符串字面值和数字组成。最终,结果应该作为QStringList可用。棘手的部分是处理字符串参数中的逗号以及字符串参数可能使用单引号或双引号的事实。在我自己找到解决方案(使用正则表达式)之前,其他人可能已经处理过这个问题或类似的问题。

例子:

参数列表字符串

"Foo", "not 'bar'", 'a, b ,c', 42, 1e-8

应该转换为包含

项的字符串列表

Foo, not 'bar', a, b, c, 421e-8

(省略每一项的引号以避免混淆)

不熟悉您的参数的所有可能性,但是您提到的示例与此正确匹配:(?<=")[w',-]*?(?=")|(?<=^'|s').*(?='(?:,|$))|[w-]+,如下所示:https://regex101.com/r/rX7fX7/3

这个想法是你把"困难"的情况写在交替的地方,最好写在左边,而不那么困难的解决方案写在右边。这样,在尝试匹配整个单词之前,引擎将首先检查是否存在问题。

当前的正则表达式不能正常工作,如果引号/双引号出现在参数中间,但你的例子没有这种情况。