gpt4 book ai didi

lua - 在 Lua 中反转 string.find() 或 string.gmatch ?

转载 作者:行者123 更新时间:2023-12-01 08:36:42 24 4
gpt4 key购买 nike

我有一个包含以下内容的字符串:

##### abc 'foo'
/path/to/filename:1
##### abc 'bar'
/path/to/filename:1

该字符串可能很长(例如 50 行)并且不会经常更改。

我想获取单引号之间最后一次出现的文本(本例中为 bar )。这类似于其他人的 Python problem (除了 Lua 中的答案对我不起作用,如下所示)。

我可以解析每一行,并将结果放入一个数组中,然后只取数组的最后一个元素,但这对我来说似乎并不优雅:

本地文本 = [[
##### abc 'foo'
/路径/到/文件名:1
##### abc '酒吧'
/路径/到/文件名:1
]]

本地 arr = {}
本地模式 = "abc '([^']+)'"
for s in text:gmatch(pattern) do
table.insert(arr, s)
结尾
打印('最后:',arr [#arr])

我对使用 Lua 字符串模式从末尾搜索字符串很感兴趣。我在下面尝试的模式从开始而不是结束开始:

本地文本 = [[
##### abc 'foo'
/路径/到/文件名:1
##### abc '酒吧'
/路径/到/文件名:1
]]

-- FIXME:从头开始模式搜索
本地模式 = "abc '([^']+)'.*$"

本地 s = 文本:gmatch(pattern)()
assert(s == 'bar', 'expected "bar"but seen "'..s..'"')
打印('最后:',s)

这产生:

输入:12:预期“bar”但看到“foo”

什么字符串模式指定了我正在寻找的“反向搜索”?

最佳答案

你可以用

local pattern = ".*abc '([^']+)'"
.* 是贪婪的,所以它在匹配之前尽可能多地咀嚼(在这种情况下,它咀嚼所有较早的匹配并给你最后的匹配)。

或者,如果您真的想要,您也可以反转您的字符串和(某种)您的模式,但我认为最好依靠贪婪的 .* :P
pattern = "'([^']+)' cba"
print(text:reverse():gmatch(pattern)()) -- rab
print(text:reverse():gmatch(pattern)():reverse()) -- bar

关于lua - 在 Lua 中反转 string.find() 或 string.gmatch ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com