查找与Lua中的模式匹配的第一个字符串(XML模式匹配)

Jam*_*ord 2 xml string lua lua-patterns

我目前正在使用以下代码来解析Xml文件的一部分(我首先将整个文件读入一个字符串).

for xmlMatch in xmlString:gmatch("<MyXmlElement.*</MyXmlElement>") do
    -- Do something.
end
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是for循环只执行一次,因为gmatch函数只返回一个字符串,该字符串从MyXmlElement的第一个实例开始,并在MyXmlElement的最后一个实例的闭包处结束.我怎样才能解析字符串,以便在匹配模式每当字符串"</MyXmlElement>"第一个发现(而不是只有最后一种情况)?

jpj*_*obs 8

这里有三个错误:

  • gmatch从字符串返回捕获的子字符串,因此您需要使用()围绕要在循环中使用的内容
  • 用于匹配尽可能少的字符数,你应该使用它.-作为模式直到第一个可能的</MyXmlElement>
  • 你需要变量后的变量(但我猜这只是一个错字)

所以一起:

for att,cont in XmlString:gmatch'<MyXmlElement%s*(.-)>(.-)</MyXmlElement>' do
    -- something
end
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 你为什么用%s +代替%s-?'<MyXmlElement%s +(.-)>'与'<MyXmlElement>'不匹配,因为它在标记名称后至少需要1个空格.所以它只会匹配MyXmlElement标签和属性. (2认同)