У меня есть строка 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"}}';
Первые два байта, показанные как .., содержат два байта для длины в формате с прямым порядком байтов.Затем после {"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
apis.Есть ли более эффективный вариант сделать это.