您好我想要替换/添加(-SNAPSHOT)到pom.xml中的版本。如果版本是1.1.1我想要1.1.1-SNAPSHOT并且它已经是SNAPSHOT保持不变。
目前我有这个
<propertyregex property="snapshotVersionRepl"
input="${pom.project.version}"
regexp="(.*)(-SNAPSHOT)?"
replace="\1-SNAPSHOT"
casesensitive="false" />
但是输入1.0.0我得到1.0.0-SNAPSHOT-SNAPSHOT,而1.0.0-SNAPSHOT我得到1.0.0-SNAPSHOT-SNAPSHOT-SNAPSHOT。
答案 0 :(得分:1)
您可以通过添加锚点并使第一个.*
懒惰来修复模式:
regexp="^(.*?)(-SNAPSHOT)?$"
请参阅regex demo
<强>详情
^
- 字符串开头(.*?)
- 第1组:除了换行符之外的任何0 +字符,尽可能少(-SNAPSHOT)?
- 可选的-SNAPSHOT
序列$
- 字符串结束。答案 1 :(得分:0)
首先,我建议避免使用ant-contrib,因为它往往会促进Ant脚本中的不良做法。任何类型的字符串操作都可以通过本机Ant的filterchain
类型来完成。
关于你的正则表达式,Wiktor的模式有效,但在这种情况下,我更喜欢使用负面的lookbehind。
测试目标:
<target name="replace-version">
<property name="pom.project.version1" value="1.1.1" />
<loadresource property="snapshotVersionRepl1">
<propertyresource name="pom.project.version1" />
<filterchain>
<tokenfilter>
<replaceregex pattern="(.*)(?<!-SNAPSHOT)$" replace="\1-SNAPSHOT" />
</tokenfilter>
</filterchain>
</loadresource>
<echo>${snapshotVersionRepl1}</echo>
<property name="pom.project.version2" value="1.1.1-SNAPSHOT" />
<loadresource property="snapshotVersionRepl2">
<propertyresource name="pom.project.version2" />
<filterchain>
<tokenfilter>
<replaceregex pattern="(.*)(?<!-SNAPSHOT)$" replace="\1-SNAPSHOT" />
</tokenfilter>
</filterchain>
</loadresource>
<echo>${snapshotVersionRepl2}</echo>
</target>
输出:
[echo] 1.1.1-SNAPSHOT
[echo] 1.1.1-SNAPSHOT
请注意,使用<
代替<
以避免破坏XML语法。