我需要在Ant中使用正则表达式来从文件名中删除版本号(具体是JAR)。我已经尝试了在SO上找到的一些建议,但它们在一定程度上有效,但我有一些用例我无法解决。这是我的用例...
用例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
显然我会比上面的例子中显示的更多,但希望我上面提到的内容可以帮助其他人实现已接受的答案。
答案 0 :(得分:0)
以下正则表达式可以解决这个问题:
(.*)-\d+\.\d+\.\d+(\.jar)$
说明:
(.*)
最初匹配整个文件名。 -\d+\.\d+\.\d+(\.jar)$
然后导致正则表达式回溯以查看它是否可以匹配文件名末尾的-x.x.x.jar
。
\d+
匹配数字。
文件名的前导部分在\1
中捕获。 .jar
中捕获了\2
。
如果文件名不以-x.x.x.jar
结尾,则正则表达式将不匹配,文件名将保持不变。