Java 正则表达式无法正确分解具有版本号的文件路径
我使用正则表达式模式来分解servlet的上下文路径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.
/{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表达式,其中/
是任何子元素的缩写。