首页 > 解决方案 > 如何在Lua中解析一系列带有空格的字符串

问题描述

我正在尝试解析一个 txt 文件,该文件的格式为Lua中的主机名 IP mac-address格式。所有三个用空格分隔,尝试然后使用 Lua 将其存储到表中。

我尝试过使用 :match 函数执行此操作,但看不到让它工作。

function parse_input_from_file()
  array ={}
  file = io.open("test.txt","r")
  for line in file:lines() do
    local hostname, ip, mac = line:match("(%S+):(%S+):(%S+)")
    local client = {hostname, ip, mac}
  table.insert(array, client)
  print(array[1])
  end
end

它继续在内存中打印每个键/值的存储位置(我认为)。

我确信这是一个相对简单的修复,但我似乎看不到它。

标签: parsinglua

解决方案


如果主机名、ip 和 mac 用空格分隔,则您的模式可能不使用冒号。我添加了一些更改以将捕获存储在客户端表中。

function parse_input_from_file()
  local clients ={}
  local file = io.open("test.txt","r")
  for line in file:lines() do
    local client = {}
    client.hostname, client.ip, client.mac = line:match("(%S+) (%S+) (%S+)")
    table.insert(clients, client)
  end
  return clients
end

for i,client in ipairs(parse_input_from_file()) do
   print(string.format("Client %d: %q %s %s", i, client.hostname, client.ip, client.mac))
end

或者:

local client = table.unpack(line:match("(%S+) (%S+) (%S+)"))

然后hostnameclient[1]不是很直观。


推荐阅读