Java 正则表达式无法正确分解具有版本号的文件路径

Java 正则表达式无法正确分解具有版本号的文件路径,java,regex,file,path,version,Java,Regex,File,Path,Version,我使用正则表达式模式来分解servlet的上下文路径 /{1,2}([^/{1,2}]+) 这对于像/User/folder1/folder2/folder3/这样的简单路径非常有效 然而,在更真实的场景中,如果其中一个文件夹名称包含虚线版本号,例如:/User/username/Library/Tomcat/apache-Tomcat-6.0.24,则似乎会出现问题 在这种情况下,Matcher.group(1)将返回apache-tomcat-6.0.而不是apache-tomcat-6.

我使用正则表达式模式来分解servlet的上下文路径

/{1,2}([^/{1,2}]+)
这对于像
/User/folder1/folder2/folder3/
这样的简单路径非常有效

然而,在更真实的场景中,如果其中一个文件夹名称包含虚线版本号,例如:
/User/username/Library/Tomcat/apache-Tomcat-6.0.24
,则似乎会出现问题

在这种情况下,
Matcher.group(1)
将返回
apache-tomcat-6.0.
而不是
apache-tomcat-6.0.24
。我不知道为什么会这样;我认为不应该

有什么见解吗

编辑

这项工作:

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

[^/{1,2}]
表示“除了
/
{/code>,
1
2
}
”之外的每个字符,因此
24
2
不匹配(它与
a/2
这样的路径相同,并且与版本号无关)。在
[…]
内部,大多数字符都是按字面解释的,像
{1,2}
这样的结构不起作用。我认为如果你只是简单地说
[^/]+
就可以了。我不知道为什么要匹配两个连续的斜杠,只需匹配一个斜杠并过滤掉空的目录名。

在.NET中{x,y}意味着匹配最后一个标记的x到y。另外,你可以在[…]子句之后写。这些在java中意味着什么?还有,没有任何字符串。您可以使用Split,在/?上进行拆分。@Philip几乎回答了这个问题。我需要记住只在字符类之外使用范围量词表达式。我的错。我也可以使用字符串拆分,但我还想在另一个xpath表达式的正则表达式模式中使用它,以便将名称空间和谓词分开。谢谢你的评论!好的,谢谢。我之所以要匹配双斜杠,是因为我还想将这个正则表达式用于xpath表达式,其中
/
是任何子元素的缩写。