意外的 lua 模式匹配结果
Unexpected lua pattern matching result
对于以下代码:
local function getParentPath(_path)
pattern = "(.+)([/\][/\])(.+)"
i,j,k = string.match(path,pattern)
return i,j,k
end
print(getParentPath(path))
对于路径 = "C://data//file.text",我得到:
C://data // file.text
但是对于路径 = "C:\data\file.text",我得到:
nil nil nil
我正在寻找一种对两者都适用的模式。有什么建议吗?
完全符合预期。首先贪心 (.+)
在不破坏以下模式的情况下尽可能多地匹配符号 - 即直到最后一个斜线的所有内容都是 ([/\]+)
匹配所必需的。
问题是第一个.+
贪婪匹配,抢到最后一个\
然后回溯。然后,一个\
可以匹配到[\/]
,这样第一组有一个反斜杠,第二组有第二个
您可以使用
修复它
pattern = "^(.-)([/\]+)([^/\]+)$"
解释:
^
- 字符串开头
(.-)
- 任何字符但尽可能少(惰性匹配 -
量词)
([/\]+)
- 1+ /
或 \
([^/\]+)
- /
和 \
以外的 1+ 个字符
$
- 字符串结尾
对于以下代码:
local function getParentPath(_path)
pattern = "(.+)([/\][/\])(.+)"
i,j,k = string.match(path,pattern)
return i,j,k
end
print(getParentPath(path))
对于路径 = "C://data//file.text",我得到:
C://data // file.text
但是对于路径 = "C:\data\file.text",我得到:
nil nil nil
我正在寻找一种对两者都适用的模式。有什么建议吗?
完全符合预期。首先贪心 (.+)
在不破坏以下模式的情况下尽可能多地匹配符号 - 即直到最后一个斜线的所有内容都是 ([/\]+)
匹配所必需的。
问题是第一个.+
贪婪匹配,抢到最后一个\
然后回溯。然后,一个\
可以匹配到[\/]
,这样第一组有一个反斜杠,第二组有第二个
您可以使用
修复它pattern = "^(.-)([/\]+)([^/\]+)$"
解释:
^
- 字符串开头(.-)
- 任何字符但尽可能少(惰性匹配-
量词)([/\]+)
- 1+/
或\
([^/\]+)
-/
和\
以外的 1+ 个字符
$
- 字符串结尾