You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ant实现文件包含任一指定字符串的检测(替换AND为OR逻辑)

解决方案:用正则表达式实现Ant文件筛选的逻辑或匹配

可以通过Ant的<regexpmatch>筛选器结合正则表达式的**或操作符(|)**实现需求,替换原有的多个<contains>标签。

原逻辑问题

原代码中<fileset>下的多个<contains>是**逻辑与(AND)**关系,要求目标文件同时包含三个指定文本才会被统计,最终触发warningFilesFound属性设置。

修改思路

Ant的<regexpmatch>支持正则表达式,我们可以把三个需要匹配的文本转换为正则分支,用|分隔,实现**逻辑或(OR)**匹配——只要文件包含任意一个目标文本,就会被<fileset>选中。

修改后代码

<condition property="warningFilesFound">
  <resourcecount when="greater" count="0">
    <fileset id="warnings-fileset-id" dir="${target.dir}/xref" includes="**/*.warnings">
      <regexpmatch pattern="requires &quot;CHARACTER&quot;,&quot;RAW&quot; or &quot;COLUMN&quot; for double-byte or multi-byte\(UTF8\) languages\. \(3619\)|requires &quot;CHARACTER&quot; or &quot;RAW&quot; for double-byte languages\. \(2363\)|requires &quot;CHARACTER&quot;, &quot;RAW&quot;, &quot;COLUMN&quot; or &quot;FIXED&quot; for double-byte or multi-byte\(UTF8\) languages\. \(3623\)"/>
    </fileset>
  </resourcecount>
</condition>

正则说明

  1. 用|分隔三个匹配分支,对应原有的三个<contains>文本
  2. 正则中转义了特殊字符:
    • 括号( )转义为\( \)(正则中括号表示捕获组,需转义为普通字符)
    • 点.转义为\.(正则中点匹配任意字符,需转义为普通句点)
  3. XML中的双引号用&quot;实体表示,避免与属性的双引号冲突

内容的提问来源于stack exchange,提问作者Lieven Cardoen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:45:35