用于拆分给定字符串的ant任务

时间:2014-08-28 06:27:05

标签: ant

我需要从给定的URL拆分字符串并将其存储在属性中。

例如:Url:projectname / qa / projectid / version     属性需要存储:          名称=项目名称          模式= QA          ID =专案编号          版本=版本

2 个答案:

答案 0 :(得分:7)

使用内置的javascript引擎(JDK> = 1.6.06)和ant script task

<project>

<property name="url" value="projectname/qa/projectid/version"/>

 <script language="javascript">
  arr = project.getProperty('url').split('/');
  project.setProperty('Name', arr[0]);
  project.setProperty('Mode', arr[1]);
  project.setProperty('Id', arr[2]);
  project.setProperty('Version', arr[3]);
 </script>

 <echo>
  $${Name}    => ${Name}
  $${Mode}    => ${Mode}
  $${Id}      => ${Id}
  $${Version} => ${Version}
 </echo>

</project>

输出:

[echo]   ${Name}    => projectname
[echo]   ${Mode}    => qa
[echo]   ${Id}      => projectid
[echo]   ${Version} => version

将其包裹在macrodefscriptdef中以便重复使用(相当于编写新的蚂蚁任务)。

如果您更喜欢使用一些ant插件而不是ant脚本任务,请参阅Ant Flaka,它有多种字符串操作的可能性,请参阅manualexamples

- 编辑 -
split与regexp一起工作,f.e。 :

<project>
<property name="url" value="Chico.Harpo.Groucho.Gummo.Zeppo"/>

 <script language="javascript">
 <![CDATA[

  // won't work because special meaning of '.' as wildcard
  // arr = project.getProperty('url').split('.');
  // so either use
  // masking as character class '[.]' or '\\.'
  arr = project.getProperty('url').split('[.]'); 
   for (i=0; i < arr.length; i++)
   {
     print(arr[i]);
   }
 ]]>
 </script>

</project>

答案 1 :(得分:3)

只是为了展示Rebse的script方法的替代方案,这里有一个更长篇大论的正则表达方式。您可以使用以下块来提取每个属性:

<property name="url" value="projectname/qa/projectid/version"/>

<loadresource property="Name">
  <string value="${url}"/>
  <filterchain>
    <tokenfilter>
      <replaceregex pattern="(\w+)/(\w+)/(\w+)/(\w+)" replace="\1"/>
    </tokenfilter>
  </filterchain>
</loadresource>
<echo message="Name: ${Name}"/>

要从评论中回答您的问题,下面是一个示例,说明如何使用该方法提取所需的部分。我没说它很漂亮......

<target name="test">
    <property name="url" value="http://svn.abc.com/builds/abcd/qa/FACC790C-1480-49F7-80F6-B91B07E52DA9/v1.0.1/r5532/"/>

    <echo message="url: ${url}"/>

    <loadresource property="a">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\1"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="a: ${a}"/>

    <loadresource property="b">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\2"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="b: ${b}"/>

   <loadresource property="c">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\3"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="c: ${c}"/>

   <loadresource property="d">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\4"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="d: ${d}"/>

   <loadresource property="e">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\5"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="e: ${e}"/>

   <loadresource property="f">
      <string value="${url}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\6"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="f: ${f}"/>
</target>

输出:

test:
     [echo] url: http://svn.abc.com/builds/abcd/qa/FACC790C-1480-49F7-80F6-B91B07E52DA9/v1.0.1/r5532/
     [echo] a: svn.abc.com
     [echo] b: builds
     [echo] c: abcd
     [echo] d: FACC790C-1480-49F7-80F6-B91B07E52DA9
     [echo] e: 1.0.1
     [echo] f: 5532

总而言之,每次重复使用相同的模式,但选择不同的组(1-4)。该模式使用6个捕获和1个非捕获组(对于/ qa / part)。你可以做很多其他方法。