1

我想取一个代表文件路径的字符串,去掉文件名并只保存路径。

例如,如果我有:

"/folder1/folder2/file.name"

我想"/folder1/folder2/"在我的字符串中结束。

我一直在玩string.match()这里记录的:http: //lua-users.org/wiki/StringLibraryTutorial

我有以下代码:

mystring = "/var/log/test.log"
print(string.match(mystring, "%/"))

当我运行这个脚本时,我最终只返回了一个“/”。我期待它会返回字符串中两个“/”的位置。我也尝试用"%/"just替换模式,"/"但这给了我相同的结果。

我确定我错过了一些非常简单的东西,但我看不出它是什么。

4

2 回答 2

3

通过模式%/or /,你告诉string.match寻找一个字符串/,这就是你得到的。试试这个:

local mystring = "/var/log/test.log"
print(string.match(mystring, ".+/"))

这里的模式.+/意味着寻找一个或多个任何字符(.)后跟一个/+意味着它是贪婪的,即尽可能长时间地匹配。

于 2014-01-29T14:21:39.197 回答
0

尝试任何此选项:

local mystring = "/var/log/test.log"
print(mystring:gsub('([%w+]+%.%w+)$',''))

输出:/var/log/

local mystring = "/var/log/test.log"
print(mystring:match('^(/.+/)'))

输出:/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/

放置模式时可以尽可能具体,以避免代码错误

于 2018-05-13T21:52:57.740 回答