我无法让变量“v”接收任何字符,而变量“k”只接收字母数字

有人能帮我解决这个问题吗?

我无法让变量“v”接收任何字符,而变量“k”只接收字母数字。

t = {}
for k, v in string.gmatch(decrypt, "(%w+)=([^']*)") do
  t[k] = v
print(k,v)
end

我有一个包含以下内容的文件:

email=mbw@iue.com
ip=192.168.100.1
mac=af:45:t6:45:67
点赞
用户2226988
用户2226988

你只会得到一个匹配是因为 * 是贪婪模式。如果你想要分割行,试试 (%w+)=([^'\n]*)\n

注意:Lua 使用模式,而不是正则表达式。有时候它们之间的差别无足轻重,有时候则至关重要。

2016-09-07 00:05:30
用户2242940
用户2242940

如果你想在文件中以 '=' 为分隔符将行分割为键值对,存储在表 t 中:

--
-- 第一部分 - 从文件中读取数据
--
local file = "pattern.dat"                     -- 数据文件
local t = {}                                   -- 存储文件值
for l in io.lines(file) do                     -- 每次获取一行
    local k, v = string.match(l, "(.+)=(.+)")  -- 以 '=' 分隔键和值
    t[k] = v                                   -- 存储在表中
    print(k,t[k])
end

print("\n\n")

--
-- 第二部分 - 从数据字符串中读取
--
local data = "email=mbw@iue.com/ip=192.168.100.1/mac=af:45:t6:45:67"
data = data .. "/"                              -- 需要一个结尾的 '/'
t = {}                                          -- 存储数据值
for l in string.gmatch(data, "(.-)/") do        -- 每次获取一行
    local k,v = string.match(l, "(.+)=(.+)")    -- 以 '=' 分隔键和值
    t[k] = v
    print(k,t[k])
end

关于 '^' 锚点的注意事项(参考手册中的 'gmatch' 条目):

对于该函数, '^' 开头的模式不起锚点作用,因为这会阻止迭代。 http://www.lua.org/manual/5.3/manual.html#pdf-string.gmatch

2016-09-07 02:03:24