Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ant根据条件替换文件中的字符串_Ant - Fatal编程技术网

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

如何使用ant根据条件替换文件中的字符串,ant,Ant,我想用ant替换文件中的字符串。例如,我需要扫描目录中的所有文件以匹配字符串“CHANGEME”,我使用下面的代码实现了这一点 <replaceregexp dir="C:/sample" match='CHANGEME' replace='XXX' flags="gi" byline="true" /> 现在,如果字符串包含任何特殊字符(如“CHANGEME?”),则不应更改该字符串。有人能建议如何在replaceregexp ant任务中处理这种情况吗?这可以通过regex

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

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


现在,如果字符串包含任何特殊字符(如“CHANGEME?”),则不应更改该字符串。有人能建议如何在replaceregexp ant任务中处理这种情况吗?

这可以通过regex模式本身来完成。您不需要在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类别。您没有明确指定哪些字符应被视为“特殊字符”,但这应该涵盖其中的大多数字符。如果您有任何异常值,请告诉我,我将相应地编辑答案。

这可以通过正则表达式模式本身来完成。您不需要在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类别。您没有明确指定哪些字符应被视为“特殊字符”,但这应该涵盖其中的大多数字符。如果您有任何异常值,请告诉我,我将相应地编辑答案。

谢谢@CAustin。这就是我要找的。谢谢你的解决方案。我的假设是,如果要替换的字符串后面包含问号(?),则不应替换。谢谢@CAustin。这就是我要找的。谢谢你的解决方案。我的情况是,如果要替换的字符串后面包含问号(?),则不应替换该字符串。