意外的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 = "^(.-)([/\\]+)([^/\\]+)$"