Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Regex 使用Ant替换文件中的所有uu,但仅替换特定字符串中的uu?_Regex_Ant - Fatal编程技术网

Regex 使用Ant替换文件中的所有uu,但仅替换特定字符串中的uu?

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

这看起来应该很简单:使用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 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.