如何使用ant替换基于条件的文件中的字符串

时间:2017-11-30 07:21:09

标签: ant

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

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

现在,如果字符串包含任何特殊字符,例如&#34; CHANGEME?&#34;,则不应该更改字符串。任何人都可以建议如何在replaceregexp ant任务中处理这个条件吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

(?! ... ) - 否定前瞻。如果这些括号中包含的模式不遵循它,则上述模式(“CHANGEME”)将仅成功匹配。

\p{P} - 标点字符的Unicode类别。您没有确切地指定哪些字符应被视为“特殊字符”,但这应涵盖其中的大部分。如果您有任何异常值,请告诉我,我会相应地编辑答案。