我试图使用replaceregexp
来搜索和替换多个文件上的版权符号和垃圾字符,但特别是那些在2000范围内具有日期的文件,因此我决定使用非捕获组来匹配版权符号后的数字并仅替换版权符号。但由于某种原因,它仍然取代了符号和数字。
例如:
© 2007 Mail Services Bla Bla Bla
预期结果是:
C 2007 Mail Services Bla Bla Bla
但是我得到:
C Bla Bla Bla
下面是我的代码:
<replaceregexp match="${match.exp}" replace="${replace.str}" byline="true">
<fileset dir="${parent.dir}">
<include name="**/*.js"/>
<include name="**/*.jsp"/>
<include name="**/*.xml"/>
<include name="**/*.properties"/>
<include name="**/*.css"/>
<include name="**/*.java"/>
<!-- Excluding some files -->
<exclude name="**/yu.js"/>
<exclude name="**/JSMenu.js"/>
<exclude name="**/jqueryTimerPack.js."/>
<exclude name="**/jqu.js"/>
<exclude name="**/jqui.js"/>
<exclude name="**/AM.properties"/>
</fileset>
</replaceregexp>
我使用的正则表达式是:
(?:s*)(©|�|©)(?:s*20dd,sMail Services)
非捕获组仍然被消耗和替换,它只是没有被"捕获",因为与该组中的模式匹配的字符没有为您存储。(看这个答案:Regex非捕获组正在捕获)
相反,您应该捕获这些组并使用它们来重建所需的字符串。
例如,如果您的正则表达式是(?:s*)(©|�|©)(?:s*20dd,sMail Services)
,请尝试使用(s*)(©|�|©)(s*20dd,sMail Services)
和1C2
之类的替换字符串。我不确定最后一组中的逗号是否是有意的,因为它与您提供的示例不匹配。