Lua 模式 returns 获取括号之间的多个子字符串时匹配错误

Lua pattern returns wrong match when fetching multiple substrings between brackets

所以我遇到了正则表达式的问题。如下所示,我使用正则表达式“CreateRuntimeTxd%(.*%)”

local _code = [[
Citizen.CreateThread(function()
    local dui = CreateDui("https://www.youtube.com/watch?v=dQw4w9WgXcQ", 1920, 1080)
    local duiHandle = GetDuiHandle(dui)
    CreateRuntimeTextureFromDuiHandle(CreateRuntimeTxd('rick'), 'nevergonnagiveuup', duiHandle)

    while true do
        Wait(0)
        DrawSprite('rick', 'nevergonnagiveuup', 0.5, 0.5, 1.0, 1.0, 0, 255, 255, 255, 255)
    end
end)
]]

for match in string.gmatch(_code, "CreateRuntimeTxd%(.*%)") do
    print(match)
end

所以问题是当前正则表达式匹配

CreateRuntimeTxd('rick'), 'nevergonnagiveuup', duiHandle)

    while true do
        Wait(0)
        DrawSprite('rick', 'nevergonnagiveuup', 0.5, 0.5, 1.0, 1.0, 0, 255, 255, 255, 255)
    end
end)

但我只希望它匹配 CreateRuntimeTxd('rick')

你需要使用

for match in string.gmatch(_code, "CreateRuntimeTxd%(.-%)") do
    print(match)
end

Lua demo详情:

  • CreateRuntimeTxd - 文字文本
  • %( - 文字 ( 字符
  • .- - 零个或多个字符(完成匹配所需的最少数量)
  • %) - 一个 ) 字符。

也可以使用取反符class、[^()]*(如果)前不能有())或[^)]*(如果仍需要 ) 个字符)而不是 .-:

for match in string.gmatch(_code, "CreateRuntimeTxd%([^()]*%)") do
    print(match)
end

参见 this Lua demo