String Lua模式以匹配路径
我想取一个表示文件路径的字符串,去掉文件名,只保存路径 例如,如果我有:String Lua模式以匹配路径,string,lua,substring,lua-patterns,String,Lua,Substring,Lua Patterns,我想取一个表示文件路径的字符串,去掉文件名,只保存路径 例如,如果我有: "/folder1/folder2/file.name" 我想以字符串中的“/folder1/folder2/”结束 我一直在玩string.match(),如下所述: 我有以下代码: mystring = "/var/log/test.log" print(string.match(mystring, "%/")) 当我运行这个脚本时,我只返回了一个“/”。 我希望它会返回字符串中两个“/”的位置。 我还尝试将模式“
"/folder1/folder2/file.name"
我想以字符串中的“/folder1/folder2/”
结束
我一直在玩string.match()
,如下所述:
我有以下代码:
mystring = "/var/log/test.log"
print(string.match(mystring, "%/"))
当我运行这个脚本时,我只返回了一个“/”。
我希望它会返回字符串中两个“/”的位置。
我还尝试将模式“%/”
替换为“/”
,但结果相同
我肯定我遗漏了一些非常简单的东西,但我看不出它是什么。根据模式
%/
或/
,您正在告诉string.match
查找字符串/
,这就是您得到的。试试这个:
local mystring = "/var/log/test.log"
print(string.match(mystring, ".+/"))
这里的模式+/
意味着查找一个或多个任意字符(
),后跟一个/
<代码>+表示它贪婪,即尽可能长的匹配。尝试以下任何选项:
local mystring = "/var/log/test.log"
print(mystring:gsub('([%w+]+%.%w+)$',''))
输出:/var/log/
输出:/var/log/
还是太简单了
function anystring(string)
local string = string:match('^(/.+/)')
if anystring then
return string
else
return false
end
end
local mystring = anystring('/var/log/test.log')
print(mystring)
输出:/var/log/
您可以在放置模式时尽可能具体以避免代码错误无需转义
/
@lhf现已修复,有时我忘记了所有的魔法字符。但是转义/
同样有效,这也是我喜欢Lua的原因之一。不过,转义序列在路径中失败了。
function anystring(string)
local string = string:match('^(/.+/)')
if anystring then
return string
else
return false
end
end
local mystring = anystring('/var/log/test.log')
print(mystring)