如何使用 ant 根据条件替换文件中的字符串

How to replace a string in a file based on a condition using ant

我想用 ant 替换文件中的字符串。例如,我需要扫描目录中的所有文件以匹配字符串 "CHANGEME",我使用以下代码实现了这一点,

<replaceregexp dir="C:/sample" match='CHANGEME' replace='XXX' flags="gi" byline="true" />

现在,如果字符串包含 "CHANGEME?" 等任何特殊字符,则不应更改该字符串。谁能建议如何在 replaceregexp ant 任务中处理这种情况?

这可以通过正则表达式模式本身来完成。您不需要在 Ant 中创建条件。

另请注意,replaceregexp 任务不支持 dir 属性。如果您想 运行 替换多个文件,则需要使用嵌套资源集合。

<replaceregexp match="CHANGEME(?!\p{P})" replace="XXX" flags="gi" byline="true">
    <fileset dir="C:/sample" includes="**/*" />
</replaceregexp>

(?!\p{P})的解释:

(?! ... ) - 否定前瞻。前面的模式 ("CHANGEME") 只有在这些括号中包含的模式不跟在它后面时才会成功匹配。

\p{P} - 标点字符的 Unicode 类别。您没有确切指定应考虑哪些字符 "special characters",但这应该涵盖了大部分字符。如果您有任何异常值,请告诉我,我会相应地编辑答案。