以下代码:
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
我正在寻找一种适合两者的模式。有什么建议吗?
答案 0 :(得分:5)
问题是第一个.+
贪婪地匹配并抓取所有直到最后\
然后回溯。然后,一个\
可以与[\\/]
匹配,因此第一组有一个反斜杠,第二个组有第二个。
您可以使用
修复它pattern = "^(.-)([/\\]+)([^/\\]+)$"
请参阅IDEONE demo
说明:
^
- 字符串开头(.-)
- 任何字符,但尽可能少(与-
量词的懒惰匹配)([/\\]+)
- 1 + /
或\
([^/\\]+)
- /
和\
$
- 字符串结尾答案 1 :(得分:3)
完全可以预料到。第一个贪婪的(.+)
匹配尽可能多的符号,而不会破坏以下模式 - 即使([/\\]+)
匹配所需的最后一个斜杠。