我需要将标准的Ivy依赖标记映射到它的三个属性(org,name,rev)。
以下代码不会捕获任何内容
<!-- <dependency\s+org="([^"]+)"\s+name="([^"]+)"\s+rev="([^"]+)".*/> -->
<regexp id="ivyPattern" pattern="<dependency\s+org="([^"]+)"\s+name="([^"]+)"\s+rev="([^"]+)".*/>" />
<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转义。
为什么它不起作用?每个正则表达式测试者都说(未转义)模式效果很好!
答案 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
标记中引用声明的正则表达式