开发者

Regex does not properly break down file path with a version number

开发者 https://www.devze.com 2023-01-07 16:35 出处:网络
I was using a regex pattern to break down the context path for a servlet. /{1,2}([^/{1,2}]+) This works great for simple paths like /User/folder1/folder2/folder3/.

I was using a regex pattern to break down the context path for a servlet.

/{1,2}([^/{1,2}]+)

This works great for simple paths like /User/folder1/folder2/folder3/.

In more real world scenario however there seems to be a problem if one of the folder names contains a dotted version number, such as: /User/username/Library/Tomcat/apache-tomcat-6.0.24.

In this case Matcher.group(1) will return apache-tomcat-6.0. instead of apache-tomcat-6.开发者_如何学C0.24. I don't know why that happens; I believe it should not.

Any insights?

Edit

This works:

/{1,2}([^/]+)


[^/{1,2}] means "every character except /, {, 1, ,, 2 and }", so the 2 of 24 doesn't get matched (it will be the same with a path like a/2 and is unrelated to version numbers). Inside […], most characters are interpreted literally, and constructs such as {1,2} don't work. I think it should work if you simply say [^/]+ instead. I'm not sure why you want to match two consecutive slashes anyway—simply match a single slash and filter out empty directory names.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号