我有一个ant属性,其值为1.0.0.123
我想在最后一个点之后提取值,在这种情况下将是'123'。 我应该使用哪个蚂蚁任务以及如何使用?
答案 0 :(得分:10)
我怀疑最简单的方法可能是使用ant-contrib PropertyRegex task。
这样的事情 - 完全未经测试:
<propertyregex property="output"
input="input"
regexp=".*([^\.]*)"
select="\1" />
答案 1 :(得分:9)
如果不想使用外部库或脚本,我在an answer to a similar question找到了最好的选择(相信他的答案)。在这里,您将使用ReplaceRegex:
<loadresource property="index">
<propertyresource name="build.number"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern=".*\.)" replace="" />
</tokenfilter>
</filterchain>
</loadresource>
(我在您的解决方案中使用了与您相同的变量名称。当然,这仍然缺少答案的增量部分,但这不在您的问题中。)
此脚本在index
中加载了从.*\.)
删除正则表达式build.number
的结果,即build.number = 1.0.0.123
然后index = 123
。
build.xml:
<project name="ParseBuildNumber" default="parse" basedir=".">
<property name="build.number" value="1.0.0.123"/>
<target name="parse">
<loadresource property="index">
<propertyresource name="build.number"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern=".*\." replace="" />
</tokenfilter>
</filterchain>
</loadresource>
<echo message="build.number=${build.number}; index=${index}"/>
</target>
</project>
$ ant
Buildfile: /tmp/build.xml
parse:
[echo] build.number=1.0.0.123; index=123
BUILD SUCCESSFUL
Total time: 0 seconds
答案 2 :(得分:8)
好的,我自己找到了答案并且已经过测试。 你只需要使用一些javascript。
<target name="get build ctr">
<script language="javascript">
<![CDATA[
// getting the value
buildnumber = myproj.getProperty("build.number");
index = buildnumber.lastIndexOf(".");
counter = buildnumber.substring(index+1);
myproj.setProperty("buildctr",counter);
]]>
</script>
</target>
答案 3 :(得分:7)
<propertyregex property="xtractedvalue"
input="${foobar}"
regexp="(.*)\.(.*)$"
select="\2" />
答案 4 :(得分:1)
这是使用flaka而不使用脚本=
的解决方案<project xmlns:fl="antlib:it.haefelinger.flaka">
<property name="foobar" value="1.0.0.123"/>
<target name="main">
<!-- simple echo -->
<fl:echo>xtractedvalue => #{split('${foobar}','\.')[3]}</fl:echo>
<!-- create property for further processing.. -->
<fl:let>
xtractedvalue := split('${foobar}','\.')[3]
</fl:let>
<echo>$${xtractedvalue} => ${xtractedvalue}</echo>
</target>
</project>
答案 5 :(得分:1)
我还会使用ant-contrib PropertyRegex任务。 以下代码段仅在输入字符串符合您在说明中使用的约定时才有效,您还可以通过更改在select标记中输入的值来使用它来提取其他数字。
<propertyregex property="output"
input="input"
regexp="(\d)\.(\d)\.(\d)\.(\d{3})"
select="\4" />
如果输入字符串不符合约定,您还可以使用输出字符串上的issest任务打印出错误消息,因为不会设置输出属性。