我有一个lua字符串s1,如下所示。
s1='..{"login":{"username":"necs_0","url":"sip:192.168.1.218","contact":"sip:necs_0@192.168.1.218:61376","serverip":"192.168.1.216","serverport":"4080"}}';
显示为..的前两个字节包含两个字节,其长度为big endian格式。然后
{"login":{"username":"necs_
存在索引值 0 。我需要提取该索引值。
我写了下面的脚本,它可以工作。我想知道什么是最有效的编写方法。
s1='..{"login":{"username":"necs_0","url":"sip:192.168.1.218","contact":"sip:necs_0@192.168.1.218:61376","serverip":"192.168.1.216","serverport":"4080"}}';
-- Advance first two bytes
s2 = s1:sub(3);
-- Find the index of necs_
index1 = s2:find('necs_', 1, true);
-- Find the index of "
index2 = s2:find('"', index1, true);
-- Extract the data between necs_ and "
s3=string.sub(s2,index1+5,index2-1);
-- Print the extracted data
print(s3)
让我担心的是,在s2 = s1:sub(3)
行中,s2创建了一个新字符串,并将s1中的内容复制到了新字符串s2中。在使用C的情况下,我本可以像s2 = s1 + 2
那样做,因此可以避免复制。
然后我正在使用find
和sub
API。有没有更好的选择呢?