lua - 意外的 lua 模式匹配结果

标签 lua lua-patterns

对于以下代码:

local function getParentPath(_path)

    pattern = "(.+)([/\\][/\\])(.+)"
    i,j,k = string.match(path,pattern)
    return i,j,k

end

print(getParentPath(path))

对于 path = "C://data//file.text",我得到:
C://data // file.text

但是对于 path = "C:\data\file.text",我得到:
nil nil nil

我正在寻找一种对两者都适用的模式。有什么建议?

最佳答案

问题是第一个.+贪婪地匹配并抓取到最后一个 \然后回溯。然后,一个 \可搭配[\\/] ,因此第一组有一个反斜杠,第二组有第二个。

您可以通过使用来修复它

pattern = "^(.-)([/\\]+)([^/\\]+)$"

IDEONE demo

解释:
  • ^ - 字符串开头
  • (.-) - 任何字符,但尽可能少(与 - 量词惰性匹配)
  • ([/\\]+) - 1+ /\
  • ([^/\\]+) - 除 / 之外的 1+ 个字符和 \
  • $ - 字符串结尾
  • 关于lua - 意外的 lua 模式匹配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36204988/

    相关文章:

    lua - Lua 4.0 中的 "tag"是什么?

    audio - 在 Corona SDK Composer 中,当我重新加载场景时,音频会稍微淡出

    lua - 无法修改lua中的循环变量

    lua - 在Lua中获取当前文件名

    string - Lua中^和gsub的使用

    正则表达式作为 Lua 模式

    lua - 如何使用 lua 关键字作为表键?

    非英文字符的 string.sub 问题

    makefile - Lua正则表达式匹配makefile中的模式

    regex - 用于验证 DNS 地址的 Lua 模式