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

发布于 2024-10-17 23:59:20 字数 340 浏览 5 评论 0原文

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

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

我遇到的问题是 for 循环仅执行一次,因为 gmatch 函数仅返回单个字符串,该字符串从 MyXmlElement 的第一个实例开始,在 MyXmlElement 的最后一个实例结束时结束。如何解析字符串,以便每当找到字符串 "" 时都匹配模式(而不仅仅是最后一种情况)?

I'm currently using the following code to parse a part of an Xml file (I first read the entire file into a single string).

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

The problem I have is that the for loop is only executing once because the the gmatch function is returning only a single string, which starts at the first instance of MyXmlElement and ends at the closure of the last instance of MyXmlElement. How can I parse the string so as the the pattern is matched whenever the string "</MyXmlElement>" is first found (and not the last case only)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你是年少的欢喜 2024-10-24 23:59:20

这里有 3 处错误:

  • gmatch 返回从字符串中捕获的子字符串,因此您需要在要在循环中使用的内容周围使用 ()
  • 来匹配您应该使用的尽可能少的字符 .- 作为模式,直到第一个可能的
  • 并且在 for 之后需要变量(但我猜这只是一个拼写错误)

所以总的来说:

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

应该可以解决问题。

There are 3 things wrong here:

  • gmatch returns the captured substrings from the string, so you need to use () around stuff you want to use in the loop
  • for matching the least possible number of characters you should use .- as pattern to go just until the first possible </MyXmlElement>
  • and you need variables after the for (but I guess that's just a typo)

So all together:

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

should do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文