如何从ANT中的:separate字符串中提取第一个元素

时间:2015-05-22 14:55:07

标签: string ant

我需要提取由'分隔的代币:'从字符串./src:./.apt_generated:中获取单个标记作为列表元素。我尝试使用this示例中的概念如下(使用dirsep,filesep等尝试了一些变体)。这些都没有奏效。如何从ANT中的给定字符串中获取所需的列表?我不能使用ant-contib或任何其他ant库。我只需要使用核心ANT。

    <pathconvert property="dir.1" >
        <path path="${srcdir.list}"/>
        <chainedmapper>
            <flattenmapper/>
            <mapper type="regexp" from="(.*?):.*" to="\1"/>
        </chainedmapper>
    </pathconvert>

    <echo>dir.1 is ${dir.1}</echo>

1 个答案:

答案 0 :(得分:2)

您可以使用脚本任务

<project name="proj">
  <property name="dir.list" value="./src:./.apt_generated:"/>

    <script language="javascript"> <![CDATA[
       var values = proj.getProperty("dir.list").split(":");
       proj.setProperty("dir.1", values[0]);
       proj.setProperty("dir.2", values[1]);
    ]]></script>

    <echo message="${dir.1}" />
    <echo message="${dir.2}" />
</project>

EDIT。我无法准确说出为什么映射器不起作用。我认为这不仅仅是一个简单的正则表达式替换,但它有一些逻辑用于路径处理。

尝试以下

<project name="proj">
   <pathconvert property="dir.1" >
     <path path="./src:./.apt_generated:"/>
      <chainedmapper>
         <flattenmapper/>
         <identitymapper/>
      </chainedmapper>
    </pathconvert>

   <echo>dir.1 is ${dir.1}</echo>
</project>

你看到它从字符串中删除了一些字符,即使它是身份映射器。