我是蚂蚁的新手,我正在尝试以下方法: -
我有一个名为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>
我尝试过这样的事情,但没有用。
答案 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