2
我有一个包含2个文件的目录,如果子在目前的搜索文件中:使用Ant,查找文件匹配正则表达式和
abc_2010-14-12.log
abcdef.log
我想在第一个文件中搜索一个子字符串。但我不知道确切的文件名称,因为它有时间戳附加到它。我想我将不得不在文件名中使用正则表达式。
我有一个包含2个文件的目录,如果子在目前的搜索文件中:使用Ant,查找文件匹配正则表达式和
abc_2010-14-12.log
abcdef.log
我想在第一个文件中搜索一个子字符串。但我不知道确切的文件名称,因为它有时间戳附加到它。我想我将不得不在文件名中使用正则表达式。
首先您必须识别该文件。您可能能够做到这一点使用普通fileset
包括:
<fileset dir="." id="the.file" includes="abc_????-??-??.log" />
如果可能会给你一个假阳性的东西像“abc_XXXX-YY-ZZ.log”,那么你可以使用一个filename
选择,这在包括提供更强大的匹配比“水珠”通配符和排除规则:
<fileset dir="." id="the.file">
<filename regex=".*_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].log"/>
</fileset>
你也许能够进一步限制,假设(根据你的例子)YYYY-MM-DD:
<filename regex=".*_20[01][0-9]-[0-3][0-9]-[01][0-9].log"/>
这些会给你一个匹配的文件集,希望只是一个文件。
如果你有多个匹配文件存在 - 比如说几天的日志文件 - 你需要决定你想要哪一个。您可以使用tstamp
任务根据当前日期精确指定文件名,而不是使用模式匹配或glob。这个例子获取与昨天的日期的文件,符合格式:
<tstamp>
<format property="file.date" pattern="yyyy-dd-MM"
offset="-1" unit="day"/>
</tstamp>
<fileset dir="." id="the.file" includes="abc_${file.date}.log" />
一旦你已经确定的文件,你可以使用resourcecontains
情况,如果该文件相匹配设置属性 - 在这种情况下,我们搜索“看看对我来说':
<condition property="file.matches">
<resourcecontains refid="the.file" substring="look for me" />
</condition>
在蚂蚁1.8.2,我得到使用文件集作为资源java.lang.ClassCastException错误:org.apache.tools.ant.types.FileSet不能转换为org.apache.tools。 ant.types.Resource – 2012-07-12 10:47:46
Ant Perl中的正则表达式是否兼容? – SexyBeast 2014-04-29 20:44:44
如何在每个文件中使用正则表达式搜索模式? – 2017-02-01 11:13:13