Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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
Lua 在分隔符上拆分字符串_Lua - Fatal编程技术网

Lua 在分隔符上拆分字符串

Lua 在分隔符上拆分字符串,lua,Lua,我有一个类似于第一部分的字符串;第二部分。我想在上拆分它并返回第二部分。在以下情况下一切正常: start = mystring:find(';') result = mystring:sub(start) 但我希望用一句话: result = mystring:sub(mystring:find(';')) 它不会抛出错误,但不会返回预期结果。这不是一个大问题,因为它可以在两行代码上正常工作,但了解它为什么不能在oneliner上工作将有助于我更好地理解lua的工作原理。find实际上返回

我有一个类似于
第一部分的字符串;第二部分
。我想在
上拆分它
并返回第二部分。在以下情况下一切正常:

start = mystring:find(';')
result = mystring:sub(start)
但我希望用一句话:

result = mystring:sub(mystring:find(';'))

它不会抛出错误,但不会返回预期结果。这不是一个大问题,因为它可以在两行代码上正常工作,但了解它为什么不能在oneliner上工作将有助于我更好地理解lua的工作原理。

find
实际上返回两个值,这两个值是您查找的字符串所在位置的开始和结束索引。在这种情况下,两个指数都是11。
然后将这两个索引传递给
sub
,得到一个子字符串,该子字符串的起点和终点都是11,因此只能得到“;”

试试这个:

s="first part;second part"  
print(s:match(";(.-)$"))
或者这个:

print(s:sub(s:find(";")+1,-1))
这也将有助于:

result = mystring:sub((mystring:find(';')))

额外的括号确保只使用一个参数调用
sub
,因此它将使用默认值(mystring的结尾)作为第二个参数。

以及任何只将第一个索引传递给sub()函数而不首先将其赋给变量的魔法?像
mystring:sub(mystring:find(“;”)[1])
(这当然不起作用)@ripat-lhf已经回答了这个问题。另请查看此页面:。例如,您可以进一步了解更好的解决方案,以防您的字符串包含两个以上的部分。实际上,不要太冗长。但我倾向于避免使用通常比字符串函数慢的正则表达式。至于match()函数,则不会使用
”;(.-)$”
模式就足够了?只需进行一些计时,find+sub的速度大约是此模式上匹配速度的6倍。因此,我将坚持使用find+sub thingie.Bingo。这就是我要问的。谢谢