对于以下代码:
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/