正则表达式以两种不同的方案捕获版本

时间:2018-07-25 20:16:52

标签: regex

因此,我有一个正则表达式,应该从给定路径中提取版本。问题是路径最近改变了,现在我需要一个正则表达式来处理这两种情况。但是,我尝试添加的or逻辑不起作用。这是两种方案:

/a/b/c/version/foo-bar_otherversion-version-assembly.jar

/a/b/version/foo/foo-bar_otherversion-assembly.jar

这些正则表达式是我尝试过的:

^.*\/(.*)(\/foo|\/)\/foo-bar[^\/]*\.jar$
^.*\/(.*)\/(foo|)(\/)?foo-bar[^\/]*\.jar$

第二个解析度足够好,但是将foo放在版本槽中。

要求:代码将读取第一个捕获的版本。

请注意,更改是版本后增加了foo-明确

2 个答案:

答案 0 :(得分:1)

具有一些修改的第二个表达式将起作用:

(?:/.*\/.\/)(.*?)(?:/foo)(?:/|-)(?:.*$)

以原始版本捕获foo的主要原因是因为您没有将其分配给非捕获组。

online regex

答案 1 :(得分:1)

我建议

^.*?\/([^\/]*)\/(?:foo\/)?foo-bar[^\/]*\.jar$

请参见regex demo

详细信息

  • ^-字符串的开头
  • .*?\/-除换行符以外的任何0+字符,并且尽可能少,直到并包括/
  • ([^\/]*)-组1:除/以外的0个字符以上
  • \/-一个/
  • (?:foo\/)?-可选的foo/子字符串
  • foo-bar-文字子字符串
  • [^\/]*-除/以外的任何0+个字符
  • \.jar-一个.jar子字符串
  • $-字符串的结尾。