使用Ant的正则表达式

时间:2013-12-13 13:30:17

标签: java regex ant

我是蚂蚁的新手,我正在尝试以下方法: -

我有一个名为info.2013.tar.gz的文件。它位于memo.dir的位置。我必须将此文件传递给ant中的变量并编写正则表达式以获取年份,即蚂蚁目标中的2013。 我一直在研究perl,我知道如何使用perl,但我不知道如何使用ant。 任何人都可以帮助我。

<target name = "new" depends="load-props,classpath">
          <fileset dir = "${memo.dir}">
            <include name = "*.tar.gz"/>
          </fileset>
</target>

我尝试过这样的事情,但没有用。

2 个答案:

答案 0 :(得分:4)

<pathconvert property="year">
    <mapper type="regexp" from="([^.]+)[.]tar[.]gz" to="\1"/>

    <path>
        <fileset dir="${memo.dir}">
            <include name="*.tar.gz"/>
        </fileset>
    </path>
</pathconvert>

<echo>year: ${year}</echo>

答案 1 :(得分:0)

您可以使用内置(自JDK 6)javascript引擎的脚本任务,f.e。 :

<project>
<!-- create macrodef for reuse -->
<macrodef name="splitstring">
  <attribute name="str" />
  <attribute name="by" />
  <attribute name="index" />
  <attribute name="result" />
  <sequential>
   <script language="javascript">
   // create property for further proccessing
   project.setProperty('@{result}', '@{str}'.split('@{by}')['@{index}']);
   </script>
  </sequential>
</macrodef>

 <fileset dir = "${memo.dir}" id="whatever">
  <include name = "*.tar.gz"/>
 </fileset>

 <splitstring by="." str="${toString:whatever}" index="1" result="foobar" />

 <echo>$${foobar} => ${foobar}</echo>

</project>

输出:

[echo] ${foobar} => 2013

请注意,project.setProperty()可能会覆盖具有相同名称的现有媒体资源,否则请使用project.setNewProperty(),因此:

<property name="foobar" value="value"/>

<splitstring by="." str="${toString:whatever}" index="1" result="foobar" />

会导致:

[echo] ${foobar} => value