【问题标题】:Regex does not properly break down file path with a version number正则表达式没有正确分解带有版本号的文件路径
【发布时间】:2010-07-19 08:26:36
【问题描述】:

我使用正则表达式模式来分解 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}([^/]+)

【问题讨论】:

  • 在 .NET {x,y} 中表示匹配最后一个标记的 x 到 y 次。此外,您可以在 [...] 子句之后编写它。这些在java中是什么意思?另外,没有任何 String.Split 你可以使用,在 / 上分割吗?
  • @Philip 几乎回答了它。我需要记住只在字符类之外使用范围量词表达式。我的错。我也可以使用字符串拆分,但我也想在另一个正则表达式模式中为 xpath 表达式使用它,以便将命名空间与谓词分开。感谢您的评论!

标签: java regex file path version


【解决方案1】:

[^/{1,2}] 表示“除了/{1,2} 之外的每个字符”,因此 242 不匹配(与a/2 之类的路径相同,与版本号无关)。在[…] 中,大多数字符都是按字面解释的,而{1,2} 等结构不起作用。我认为如果你只是说[^/]+ 应该会起作用。我不确定你为什么要匹配两个连续的斜杠——只需匹配一个斜杠并过滤掉空目录名。

【讨论】:

  • 好的,谢谢。我之所以要匹配双斜杠是因为我也想将此正则表达式用于 xpath 表达式,其中// 是任何后代元素的缩写。
猜你喜欢
  • 2023-01-23
  • 2010-09-10
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多