意外的lua模式匹配结果

意外的lua模式匹配结果,lua,lua-patterns,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”,我得到: 但是对于path=“C:\data\file.text”,我得到: 我正在寻找一个模式,

对于以下代码:

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”,我得到:

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


我正在寻找一个模式,既适合两者。有什么建议吗?

这是意料之中的事。第一个贪婪的
(.+)
匹配尽可能多的符号,而不破坏以下模式-即,使
([/\]+)
匹配所需的所有符号,直到最后一个斜杠。

问题是第一个
+
贪婪地匹配,抓住所有符号直到最后一个
\
,然后回溯。然后,一个
\
可以与
[\\/]
匹配,因此第一组有一个反斜杠,第二组有第二个反斜杠

您可以使用

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

说明:

  • ^
    -字符串的开头
  • (.-)
    -任何字符,但尽可能少(与
    -
    量词惰性匹配)
  • ([/\]+)
    -1+
    /
    \
  • ([^/\\]+)
    -1个以上字符,而不是
    /
    \
  • $
    -字符串结尾

您能否更详细地说明您希望匹配什么?最近的一切
/
?您的字符串中有两个,仅从一个示例中不清楚您真正想要的是什么。对不起,我重新框定了我的问题,请检查
nil nil nil
pattern = "^(.-)([/\\]+)([^/\\]+)$"