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)