根据文件中的正则表达式设置Ant属性

时间:2011-10-23 20:42:15

标签: regex ant

我在文件中有以下内容

version: [0,1,0]

我想将Ant属性设置为字符串值0.1.0

正则表达式是

version:[[:space:]]\[([[:digit:]]),([[:digit:]]),([[:digit:]])\]

然后我需要将属性设置为

\1.\2.\3

获取

0.1.0

我无法一起锻炼如何一起使用Ant任务。

我有Ant-contrib,所以可以使用这些任务。

3 个答案:

答案 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的方法,使用loadpropertiesfilterchain(请注意replaceregex是“字符串过滤器” - 请参阅tokenfilter docs - 而不是replaceregexp task):

<loadproperties srcFile="version.txt">
  <filterchain>
    <replaceregex pattern="\[([0-9]),([0-9]),([0-9])\]" replace="\1.\2.\3" />
  </filterchain>
</loadproperties>

注意正则表达式有点不同,我们将文件视为属性文件。

或者,您可以将loadfilefilterchain一起使用,例如,如果您要加载的文件不是属性格式。

例如,如果文件内容只是[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>