Lua模式匹配路径

时间:2014-01-29 14:16:17

标签: string lua substring lua-patterns

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

例如,如果我有:

"/folder1/folder2/file.name"

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

我一直在玩string.match(),如下所示:http://lua-users.org/wiki/StringLibraryTutorial

我有以下代码:

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

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

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

2 个答案:

答案 0 :(得分:3)

通过模式%//,您告诉string.match查找字符串/,这就是您所拥有的。试试这个:

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

此处模式.+/表示查找一个或多个字符(.)后跟/+意味着它是贪婪的,即尽可能地匹配。

答案 1 :(得分: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 /

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