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