如何用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 "CHARACTER","RAW" or "COLUMN" for double-byte or multi-byte\(UTF8\) languages\. \(3619\)|requires "CHARACTER" or "RAW" for double-byte languages\. \(2363\)|requires "CHARACTER", "RAW", "COLUMN" or "FIXED" for double-byte or multi-byte\(UTF8\) languages\. \(3623\)"/> </fileset> </resourcecount> </condition>
正则说明
- 用
|分隔三个匹配分支,对应原有的三个<contains>文本 - 正则中转义了特殊字符:
- 括号
( )转义为\( \)(正则中括号表示捕获组,需转义为普通字符) - 点
.转义为\.(正则中点匹配任意字符,需转义为普通句点)
- 括号
- XML中的双引号用
"实体表示,避免与属性的双引号冲突
内容的提问来源于stack exchange,提问作者Lieven Cardoen
相关产品推荐
相关产品推荐

