使用Ant捕获字符串到多个属性

时间:2014-10-17 13:43:50

标签: regex ant

我需要将标准的Ivy依赖标记映射到它的三个属性(org,name,rev)。

以下代码不会捕获任何内容

<!-- <dependency\s+org="([^"]+)"\s+name="([^"]+)"\s+rev="([^"]+)".*/> -->
<regexp id="ivyPattern" pattern="&lt;dependency\s+org=&quot;([^&quot;]+)&quot;\s+name=&quot;([^&quot;]+)&quot;\s+rev=&quot;([^&quot;]+)&quot;.*/&gt;" />

<target name="capture" depends="ivy-config">

    <input message="Input dependency" addproperty="dependency" />

    <propertyregex casesensitive="false" regexp="ivyPattern" input="${dependency}" select="\1" property="org" />
    <propertyregex casesensitive="false" regexp="ivyPattern" input="${dependency}" select="\2" property="name" />
    <propertyregex casesensitive="false" regexp="ivyPattern" input="${dependency}" select="\3" property="rev" />

    <echo message="Dependency: ${dependency}" />
    <echo message="Org: ${org}" />
    <echo message="Name: ${name}" />
    <echo message="Rev: ${rev}" />

</target>

测试结果:

 [echo] Dependency: <dependency org="org.apache.cxf" name="cxf-api" rev="2.7.12"/>
 [echo] Org: ${org}
 [echo] Name: ${name}
 [echo] Rev: ${rev}
 BUILD SUCCESSFUL

正如您所看到的,我使用在线资源(freeformatter.com)对XML进行了XML转义。

为什么它不起作用?每个正则表达式测试者都说(未转义)模式效果很好!

1 个答案:

答案 0 :(得分:0)

以下修订代码有效:

    <propertyregex casesensitive="false" input="${dependency}" select="\1" property="org" >
        <regexp refid="ivyPattern"/>
    </propertyregex>
    <propertyregex casesensitive="false" input="${dependency}" select="\2" property="name">
        <regexp refid="ivyPattern"/>
    </propertyregex>
    <propertyregex casesensitive="false" input="${dependency}" select="\3" property="rev">
        <regexp refid="ivyPattern"/>
    </propertyregex>

必须在带有regexp属性的refid标记中引用声明的正则表达式