For the following code:
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", I get:
C://data // file.text
But For path = "C:\data\file.text", I get:
nil nil nil
I am looking for a pattern which woks for both. Any suggestions?
The problem is that the first .+ matches greedily and grabs all up to the last \ and then backtracks. Then, one \ can be matched with [\\/], and thus the first group has one backslash, and the second has got the second.
You can fix it by using
pattern = "^(.-)([/\\]+)([^/\\]+)$"
See IDEONE demo
Explanation:
^ - start of string(.-) - any characters but as few as possible (lazy matching with - quantifier)([/\\]+) - 1+ / or \
([^/\\]+) - 1+ characters other than / and \
$ - end of stringIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With