【问题标题】:Regular Expression for Use in Ant to Remove Version Number from File NameAnt 中用于从文件名中删除版本号的正则表达式
【发布时间】:2015-10-08 22:49:43
【问题描述】:

我需要一个在 Ant 中使用的正则表达式来从文件名(特别是 JAR)中删除版本号。我已经尝试了一些关于 SO 的建议并且它们在一定程度上起作用,但是我有一些我无法解决的用例。这是我的用例...

  1. name1-x.x.x.jar
  2. name1-name2-x.x.x.jar
  3. name1-name2-name3-x.x.x.jar
  4. name1.jar
  5. name1-name2.jar
  6. name1-name2-name3.jar

用例 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 的propertyregexdefaultValue)。我最终像这样使用它(作为测试)......

    <basename property="jar.name" file="D:\SomeDir\Tomcat7\lib\commons-httpcore-4.4.2.jar"/> <!-- this would be the file name being deployed - ideally passed in as a property to a target -->

    <propertyregex property="jar.base.name" override="true"
          input="${jar.name}"
          regexp="^(.*)-\d+\.\d+\.\d+(\.jar)$"
          replace="\1*.jar"
          casesensitive="false" 
          defaultValue="${jar.name}"/>

    <echo message="Backing up/undeploying '${jar.name}' from Tomcat..." level="info"/>
    <echo message="Base JAR name is: '${jar.base.name}'" level="info"/>
    <!-- this will result in commons-httpcore*.jar -->

    <fileset id="target.file" dir="D:\SomeDir\Tomcat7\lib" includes="**/${jar.base.name}"/>

    <condition property="target.file.found" value="true" else="false">
        <resourcecount refid="target.file" when="greater" count="0"/>
    </condition>
    <echo message="File to be backed up found? '${target.file.found}'"/>

显然,我会在上面的示例中做更多的事情,但希望我上面包含的内容可以帮助其他人实施已接受的答案。

【问题讨论】:

    标签: regex ant


    【解决方案1】:

    以下正则表达式应该可以解决问题:

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

    解释:

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

    \d+ 匹配数字。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2012-11-15
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多