如何从Lua中的字符串中获取某些文本?

我想提取从HTTP请求中收到的POST参数,该请求已发送到我的NodeMCU。 我怎么能做到这一点? 我在考虑C#中的以下代码。 如何在Lua中实现这一点?

我在C#中的代码:

// Response = "Play1lol" // ValuetoSearch = "action" public static string GetInformationFromResponse(string Response, string ValueToSearch, bool RemoveHtmlCharacters = true) { string returnValue = ""; if (RemoveHtmlCharacters) { Response = Response.Replace("", ValueToSearch); Response = Response.Replace("", ValueToSearch); Response = Response.Replace("<" + ValueToSearch + ">", ValueToSearch); Response = Response.Replace("</" + ValueToSearch + ">", ValueToSearch); } // Response = "actionPlayaction1lol" int indexOfWord = Response.IndexOf(ValueToSearch); // indexOfWord = 0 int start = indexOfWord + ValueToSearch.Length; // start = 6 int end = Response.Length - indexOfWord - 1; // 47 int totalLength = Response.Length; // 48 string newPositionInfo = ""; if (indexOfWord == -1) { return ""; } else { newPositionInfo = Response.Substring(start, totalLength - start); // newPositionInfo = "Playaction1lol" indexOfWord = newPositionInfo.IndexOf(ValueToSearch); // indexOfWord = 4 returnValue = newPositionInfo.Substring(0, indexOfWord); // returnValue = "Play" if (RemoveHtmlCharacters) { returnValue = returnValue.Replace("<", ""); returnValue = returnValue.Replace(">", ""); returnValue = returnValue.Replace("&", ""); } return returnValue; // "Play" } } 

这段代码的用法如下: – 我想获得单词“action”之间的所有内容。 – 我有一个包含“行动”一词的文字。

 string largeText = "Play1blah" string wordToSearch = "action" string value1 = GetInformationFromResponse(largeText, "action"); string value2 = GetInformationFromResponse(largeText, "speed"); string value3 = GetInformationFromResponse(largeText, "blah"); // Value 1 = "Play" // Value 2 = "1" // Value 3 = "blah" 

但是我如何在Lua(在我的NodeMCU上)完成同样的事情呢?

注意:Lua和NodeMCU上的新手

 function GetInformationFromResponse(response, tag) return ((response:match((("<@>(.-)"):gsub("@",tag))) or "") :gsub("&(%w+);", {lt = "<", gt = ">", amp = "&"})) end local text = "Play1blah&blah" local value1 = GetInformationFromResponse(text, "action"); -- "Play" local value2 = GetInformationFromResponse(text, "speed"); -- "1" local value3 = GetInformationFromResponse(text, "blah"); -- "blah&blah" local value4 = GetInformationFromResponse(text, "foo"); -- "" 

以下是一些可以执行此操作的函数:

 function get_text (str, init, term) local _, start = string.find(str, init) local stop = string.find(str, term) local result = nil if _ and stop then result = string.sub(str, start + 1, stop - 1) end return result end function get_tagged (str, tag) local open_tag = "<" .. tag ..">" local close_tag = "" local _, start = string.find(str, open_tag) local stop = string.find(str, close_tag) local result = nil if _ and stop then result = string.sub(str, start + 1, stop - 1) end return result end 

样本互动:

 > largeText = "Play1blah" > -- Using get_text() > print(get_text(largeText, "", "")) Play > -- Using get_tagged() > print(get_tagged(largeText, "action")) Play > print(get_tagged(largeText, "speed")) 1 > print(get_tagged(largeText, "blah")) blah > print(get_tagged(largeText, "oops")) nil