因此,我有一个正则表达式,应该从给定路径中提取版本。问题是路径最近改变了,现在我需要一个正则表达式来处理这两种情况。但是,我尝试添加的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-明确
答案 0 :(得分:1)
具有一些修改的第二个表达式将起作用:
(?:/.*\/.\/)(.*?)(?:/foo)(?:/|-)(?:.*$)
以原始版本捕获foo的主要原因是因为您没有将其分配给非捕获组。
答案 1 :(得分:1)
我建议
^.*?\/([^\/]*)\/(?:foo\/)?foo-bar[^\/]*\.jar$
请参见regex demo
详细信息
^
-字符串的开头.*?\/
-除换行符以外的任何0+字符,并且尽可能少,直到并包括/
([^\/]*)
-组1:除/
以外的0个字符以上\/
-一个/
(?:foo\/)?
-可选的foo/
子字符串foo-bar
-文字子字符串[^\/]*
-除/
以外的任何0+个字符\.jar
-一个.jar
子字符串$
-字符串的结尾。