意外的lua模式匹配结果

tan*_*zil 4 lua lua-patterns

对于以下代码:

local function getParentPath(_path)

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

end

print(getParentPath(path))
Run Code Online (Sandbox Code Playgroud)

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

C://data // file.text
Run Code Online (Sandbox Code Playgroud)

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

nil nil nil
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种适合两者的模式.有什么建议?

Wik*_*żew 5

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

您可以使用它来修复它

pattern = "^(.-)([/\\]+)([^/\\]+)$"
Run Code Online (Sandbox Code Playgroud)

请参阅IDEONE演示

说明:

  • ^ - 字符串的开头
  • (.-)- 任何字符,但尽可能少(与-量词的懒惰匹配)
  • ([/\\]+)- 1+ /\
  • ([^/\\]+)- 除了/和之外的1个以上的字符\
  • $ - 字符串结尾