Lua string.find无法找到" /"以相反的方式查找,请查看以下代码:
C ="〜/ abc.123" 打印(string.find(C," /", - 1,真))
这总是会返回" nil"
答案 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'
另一种选择是简单地将字符串拆分为各个部分,然后获取最后一部分。