我在文件中有以下内容
version: [0,1,0]
我想将Ant属性设置为字符串值0.1.0
。
正则表达式是
version:[[:space:]]\[([[:digit:]]),([[:digit:]]),([[:digit:]])\]
然后我需要将属性设置为
\1.\2.\3
获取
0.1.0
我无法一起锻炼如何一起使用Ant任务。
我有Ant-contrib,所以可以使用这些任务。
答案 0 :(得分:5)
基于matt的第二个解决方案,这适用于任何(文本)文件,一行或不一行。它没有apache-contrib依赖。
<loadfile property="version" srcfile="version.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="version:[ \t]\[([0-9]),([0-9]),([0-9])\]"/>
</linecontainsregexp>
<replaceregex pattern="version:[ \t]\[([0-9]),([0-9]),([0-9])\]" replace="\1.\2.\3" />
</filterchain>
</loadfile>
答案 1 :(得分:4)
解决了这个问题:
<loadfile property="burning-boots-js-lib-build.lib-version" srcfile="burning-boots.js"/>
<propertyregex property="burning-boots-js-lib-build.lib-version"
override="true"
input="${burning-boots-js-lib-build.lib-version}"
regexp="version:[ \t]\[([0-9]),([0-9]),([0-9])\]"
select="\1.\2.\3" />
但它似乎有点浪费 - 它将整个文件加载到属性中!
如果有人有任何更好的建议,请发帖:)
答案 2 :(得分:4)
这是一种不使用ant-contrib的方法,使用loadproperties
和filterchain
(请注意replaceregex
是“字符串过滤器” - 请参阅tokenfilter
docs - 而不是replaceregexp
task):
<loadproperties srcFile="version.txt">
<filterchain>
<replaceregex pattern="\[([0-9]),([0-9]),([0-9])\]" replace="\1.\2.\3" />
</filterchain>
</loadproperties>
注意正则表达式有点不同,我们将文件视为属性文件。
或者,您可以将loadfile
与filterchain
一起使用,例如,如果您要加载的文件不是属性格式。
例如,如果文件内容只是[0,1,0]
,并且您想将version
属性设置为0.1.0
,则可以执行以下操作:
<loadfile srcFile="version.txt" property="version">
<filterchain>
<replaceregex pattern="\s+\[([0-9]),([0-9]),([0-9])\]" replace="\1.\2.\3" />
</filterchain>
</loadfile>