lua string.find无法匹配" /"

时间:2016-10-19 21:53:48

标签: lua find

Lua string.find无法找到" /"以相反的方式查找,请查看以下代码:

C ="〜/ abc.123" 打印(string.find(C," /", - 1,真))

这总是会返回" nil"

4 个答案:

答案 0 :(得分:1)

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

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

string.find的第三个参数将确定从哪里开始搜索。 当您输入-1时,您将从字符串的最后一个字符开始并向前搜索。当然你找不到任何东西。

对于字符串,正数指数从头开始给出一个位置,负数指数从字符串的末尾给出一个位置。

使用1从第一个字符开始。然后你会找到你的斜线。或者你可以使用任何< = -8

请注意,您也可以将c:find("/",1,true)写为较短版本。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

Lua无法进行向左搜索,请先考虑反转字符串:

function Find_Leftwards(s,m,i)
    local b,f = s:reverse():find(m, i)
    return #s-f, #s-b
end

答案 3 :(得分:0)

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

  

第三个可选的数字参数init指定从哪里开始搜索;它的默认值是1,可以是负数。

负面指数手册中的earlier note

  

允许指数为负数,并从字符串末尾解释为向后索引。因此,最后一个字符位于-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'

另一种选择是简单地将字符串拆分为各个部分,然后获取最后一部分。