我有一个带有版本的字符串为 .v_september (每个月都会有所不同)。在此中,我想在下划线后取值,这意味着" sep" (仅前3个字母)。
通过使用正则 .v _(。*)我能够完成完整的月份,无法单独获得前3个字母。
有人可以帮助我如何在Apache Ant中实现这一目标。谢谢!
在属性上的正则函数在本机蚂蚁中有点尴尬(与文件中的文本一起使用)。Ant-Contrib具有replaceregexp
任务,但我尽可能避免蚂蚁contrib。
相反,可以使用loadfile
任务和嵌套过滤器来完成:
<property name="version" value=".v_september" />
<loadfile property="version.month.short">
<propertyresource name="version" />
<filterchain>
<tokenfilter>
<replaceregex pattern=".v_(.{3}).*" replace="1" />
</tokenfilter>
</filterchain>
</loadfile>
<echo message="${version.month.short}" />
关于正则模式,请注意它需要如何以.*
结尾。这是因为ANT没有"匹配"功能,它只是返回捕获组的内容。它只是在运行一个替换,因此我们需要替换字符串中所有不是组一部分的所有内容。
.*
将捕获所有内容,并限制仅捕获三个字符,而不是编写{3}
而不是*
。另外,您应该在正则一开始时逃脱.
,以匹配字面的点。您可以使用此正则罚款并从Group1捕获
.v_(.{3})
demo