Lua的正则表达式模式,用于匹配路径。

我想获取一个表示文件路径的字符串,然后剥离文件名,只保留路径。

例如,如果我有:

"/folder1/folder2/file.name"

我希望最终得到 "/folder1/folder2/"

我一直在尝试使用文档中记录的string.match() 方法:http://lua-users.org/wiki/StringLibraryTutorial

我有以下代码:

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

运行该脚本后,我只得到一个“/”。 我原本希望它返回字符串中的两个“/”的位置。 我还尝试用 "/" 替换模式 "%/",但结果相同。

我确定我少了一些非常简单的东西,但我看不出来。

点赞
用户1009479
用户1009479

通过模式%//,你告诉string.match查找字符串/,这就是你得到的。尝试使用以下代码:

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

这里的模式.+/表示查找一个或多个任何字符(.)后面跟着一个斜杠(/)。+表示它是贪婪的,即尽可能匹配。

2014-01-29 14:21:39
用户9155965
用户9155965

尝试以下这些选项:

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-13 21:52:57