在Ant中使用的正则表达式从文件名中删除版本号

时间:2015-10-08 22:49:43

标签: regex ant

我需要在Ant中使用正则表达式来从文件名中删除版本号(具体是JAR)。我已经尝试了在SO上找到的一些建议,但它们在一定程度上有效,但我有一些用例我无法解决。这是我的用例...

  1. NAME1-x.x.x.jar
  2. NAME1名2-x.x.x.jar
  3. NAME1名2-NAME3-x.x.x.jar
  4. name1.jar
  5. NAME1-name2.jar
  6. NAME1名2-name3.jar
  7. 用例1,2,4和5是最常见的。我正在使用以下正则表达式(我从SO上的另一篇文章中获得并稍微调整一下),适用于用例1,2和3,但不适用于4,5和6.我一直在测试使用此site

    ^([a-z].+)*-[0-9]*.*\.jar$
    

    前几天我花了几个小时尝试将这个用于第4,5和6个用例,但运气不好。任何和所有的帮助将不胜感激。

    感谢!!!

    编辑10.12.2015

    接受的答案非常有效,因为它提供了所需的最低结果。换句话说,如果JAR文件名与模式不匹配,则不返回任何内容,这意味着文件名可以按原样使用(ant-contrib defaultValue的{​​{1}})。我最后使用它(作为测试)......

    propertyregex

    显然我会比上面的例子中显示的更多,但希望我上面提到的内容可以帮助其他人实现已接受的答案。

1 个答案:

答案 0 :(得分:0)

以下正则表达式可以解决这个问题:

(.*)-\d+\.\d+\.\d+(\.jar)$

说明:

(.*)最初匹配整个文件名。 -\d+\.\d+\.\d+(\.jar)$然后导致正则表达式回溯以查看它是否可以匹配文件名末尾的-x.x.x.jar

\d+匹配数字。

文件名的前导部分在\1中捕获。 .jar中捕获了\2

如果文件名不以-x.x.x.jar结尾,则正则表达式将不匹配,文件名将保持不变。