对于以下代码:
local function getParentPath(_path)
pattern = "(.+)([/\][/\])(.+)"
i,j,k = string.match(path,pattern)
return i,j,k
end
print(getParentPath(path))
For path = "C://data//file. "text",我得到:
C://data // file.text
But For path = "C:datafile. "text",我得到:
nil nil nil
我正在寻找一种模式,适用于两者。有什么建议吗?
问题是第一个.+
贪婪地匹配并抓住所有直到最后一个,然后返回。那么,一个
可以与
[\/]
匹配,因此第一组有一个反斜杠,第二组有第二个。
可以使用
修复pattern = "^(.-)([/\]+)([^/\]+)$"
参见IDEONE demo
解释:
-
^
-字符串 起始 -
(.-)
-任何字符,但尽可能少(与-
量词懒惰匹配) -
([/\]+)
- 1+/
或 -
([^/\]+)
- 1+/
和以外的字符
-
$
-字符串 结束
这完全在意料之中。首先,贪婪的(.+)
匹配尽可能多的符号,而不会破坏以下模式-即,直到最后一个斜杠,这是使([/\]+)
匹配所必需的。