lua string.find无法匹配"/"

Lua string.find在反向查找时无法匹配"/",请查看以下代码:

c="~/abc.123" print(string.find(c,"/",-1,true))

这总是返回"nil"

点赞
用户2858170
用户2858170

请参考 Lua 参考手册。 https://www.lua.org/manual/5.3/

string.find(c,"/",-1,true)

string.find 函数的第三个参数确定搜索的起始位置。 由于输入了 -1,您将从字符串的最后一个字符开始向前搜索。当然,您不会以这种方式发现任何内容。

对于字符串,正索引从开头给出位置,负索引则从字符串结尾给出位置。

使用 1 从第一个字符开始搜索。然后,您会找到您的斜杠。或者,您可以使用任何小于等于 -8。

请注意,您还可以将 c:find("/",1,true) 缩短为更短的版本。

2016-10-19 22:35:14
用户2505965
用户2505965

string.find 不能用于字符串的向左搜索。init 参数只是设置从哪个位置开始向右搜索的位置:

第三个可选的数字参数 init 指定了搜索开始的位置;其默认值是 1,并且可以是负数。

另外,在手册的早期注释中提到,负数索引是可以使用的,它们被用来反向索引字符串。因此,最后一个字符位于位置 -1,以此类推。

您需要编写自己的函数来从右侧开始搜索索引:

local function r_find (str, chr)
    local bchar = chr:byte(1)

    for i = #str, 1, -1 do
        if str:byte(i) == bchar then
            return i
        end
    end
end

print(r_find('~/.config/foo/bar', '/')) --> 14

或者考虑使用 string.match 来查找最后一节:

print(('~/.config/foo/bar'):match('/([^/]+)$')) --> 'bar'

另一个选择就是将字符串拆分为其各个部分,然后获取最后一个部分。

2016-10-19 22:55:03
用户107090
用户107090

要查找最后一个 / 的位置,请使用 string.find(s,".*/")。第二个返回值是最后一个 / 的位置。

2016-10-20 00:32:30
用户3979429
用户3979429

Lua不能进行向左搜索,考虑先翻转字符串:

function Find_Leftwards(s,m,i)
    local b,f = s:reverse():find(m, i)
    return #s-f, #s-b
end
2016-10-20 02:50:24