Regex 使用Ant替换文件中的所有uu,但仅替换特定字符串中的uu?
这看起来应该很简单:使用Ant任务,我可以使用replaceregexp来替换文件中某些字符串中的所有重复字符吗 文件内容:Regex 使用Ant替换文件中的所有uu,但仅替换特定字符串中的uu?,regex,ant,Regex,Ant,这看起来应该很简单:使用Ant任务,我可以使用replaceregexp来替换文件中某些字符串中的所有重复字符吗 文件内容: Blah blah blah <ac:link> words_with_underscores_to_turn_to_spaces</link> Blah blah blah Blah blah blah Blah blah blah Blah blah blah Words_with_underscores_that_I_want_to_keep
Blah blah blah <ac:link> words_with_underscores_to_turn_to_spaces</link>
Blah blah blah Blah blah blah Blah blah blah Blah blah blah
Words_with_underscores_that_I_want_to_keep. Blah blah blah Blah blah blah.
这将用空格替换链接中的下划线,并将链接移动到新文件中,但不包括源文件的其余部分,因为我只匹配了链接。有什么想法吗?使用
是在
中使用条件逻辑的好方法
在下面的脚本中,
将整个输入文件视为单个令牌。这允许JavaScript跨换行符匹配标记
蚂蚁脚本
-1;
如果(继续){
var openingAcLinkEndIndex=openingAcLinkBeginIndex+openingTagFormat.length;
var closingAcLinkBeginIndex=originalFile.indexOf(closingTagFormat,openingAcLinkEndIndex);
keepGoing=ClosingClinkBeginIndex>-1;
如果(继续){
transformedFile+=originalFile.slice(originalFileIndex,openingAcLinkEndIndex);
var closingaclinkedindex=closingAcLinkBeginIndex+closingTagFormat.length;
var stringBetweenAcLinkTags=originalFile.slice(打开ClinkIndex,关闭ClinkBeginIndex);
transformedFile+=stringBetweenAcLinkTags.replace(/g/g');
transformedFile+=originalFile.slice(ClosingClinkBeginIndex,ClosingClinkIndex);
原始文件索引=ClosingClinkendIndex;
}
}
}
transformedFile+=originalFile.substring(originalFileIndex);
self.setToken(transformedFile);
]]>
输出
废话废话用下划线变成空格
废话废话废话废话废话废话废话废话
带下划线的单词表示我希望保留的内容。废话废话废话。
Blah blah blah <ac:link> words with underscores to turn to spaces</link>
Blah blah blah Blah blah blah Blah blah blah Blah blah blah
Words_with_underscores_that_I_want_to_keep. Blah blah blah Blah blah blah.
<copy todir=".\test_output">
<filterchain>
<tokenfilter>
<containsregex pattern="(ac:link.*?link)" flags="gi"/>
<replacestring from="_" to=" "/>
</tokenfilter>
</filterchain>
<fileset dir=".\underscore_test_output" includes="**/*.txt"/>
</copy>
<copy todir="${out.dir}">
<fileset dir="${basedir}" includes="test.txt"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<scriptfilter language="javascript"><![CDATA[
var originalFile = self.getToken();
var originalFileIndex = 0;
var transformedFile = '';
var keepGoing = true;
// The "ac:" vs no "ac:" discrepency between the opening and closing
// tags is in the sample text from the question.
var openingTagFormat = '<ac:link>';
var closingTagFormat = '</link>';
while (keepGoing) {
var openingAcLinkBeginIndex = originalFile.indexOf(openingTagFormat, originalFileIndex);
keepGoing = openingAcLinkBeginIndex > -1;
if (keepGoing) {
var openingAcLinkEndIndex = openingAcLinkBeginIndex + openingTagFormat.length;
var closingAcLinkBeginIndex = originalFile.indexOf(closingTagFormat, openingAcLinkEndIndex);
keepGoing = closingAcLinkBeginIndex > -1;
if (keepGoing) {
transformedFile += originalFile.slice(originalFileIndex, openingAcLinkEndIndex);
var closingAcLinkEndIndex = closingAcLinkBeginIndex + closingTagFormat.length;
var stringBetweenAcLinkTags = originalFile.slice(openingAcLinkEndIndex, closingAcLinkBeginIndex);
transformedFile += stringBetweenAcLinkTags.replace(/_/g, ' ');
transformedFile += originalFile.slice(closingAcLinkBeginIndex, closingAcLinkEndIndex);
originalFileIndex = closingAcLinkEndIndex;
}
}
}
transformedFile += originalFile.substring(originalFileIndex);
self.setToken(transformedFile);
]]></scriptfilter>
</tokenfilter>
</filterchain>
</copy>
Blah blah blah <ac:link> words with underscores to turn to spaces</link>
Blah blah blah Blah blah blah Blah blah blah Blah blah blah
Words_with_underscores_that_I_want_to_keep. Blah blah blah Blah blah blah.