Apache Ant:我可以搜索特定正则表达式的所有文件,然后将匹配项打印到文件中吗?

时间:2011-06-24 10:22:25

标签: regex ant build

在Ant build.xml中,我希望能够使用以下正则表达式在所有.html文件中找到任何匹配项:

("|')((?!http://|#|mailto:|&|/)([^#\n\s\."])+?\.([^#\n\s"])+?)\1

然后,我想在文件中列出\ 2的匹配项。这可能吗?

最终结果,感谢@bakoyaro:

    <echo message="Collecting appcache files" />
    <concat destFile="your_output_file">
        <fileset dir="./${dir.publish}">
            <include name="**/*.html"/>
        </fileset>
        <filterchain>
            <linecontainsregexp>
                <regexp pattern="(.)*?(&quot;|')((?!http://|\?|#|mailto:|\1)([^#\n\s\.&quot;'?])+?\.([^#\n\s&quot;'?])+?)\2" />
            </linecontainsregexp>
            <tokenfilter>
                <replaceregex pattern="(.)*?(&quot;|')((?!http://|\?|#|mailto:|\1)([^#\n\s\.&quot;'?])+?\.([^#\n\s&quot;'?])+?)\2" flags="g" replace="\1\2\3\2${line.separator}" />
            </tokenfilter>
            <linecontainsregexp>
                <regexp pattern="(.)*?(&quot;|')((?!http://|\?|#|mailto:|\1)([^#\n\s\.&quot;'?])+?\.([^#\n\s&quot;'?])+?)\2" />
            </linecontainsregexp>
            <tokenfilter>
                <replaceregex pattern="(.)*?(&quot;|')((?!http://|\?|#|mailto:|\1)([^#\n\s\.&quot;'?])+?\.([^#\n\s&quot;'?])+?)\2" flags="g" replace="\3" />
            </tokenfilter>
            <linecontainsregexp>
                <regexp pattern="((?!http://|\?|#|mailto:|\1)([^#\n\s\.&quot;'?])+?\.([^#\n\s&quot;'?])+?)" />
            </linecontainsregexp>
        </filterchain>
    </concat>

2 个答案:

答案 0 :(得分:2)

这是一个可能有用的代码段,它将创建一个.zip文件,其中包含与您的正则表达式匹配的任何文件。我用它来检查我的构建,以确保所有的蚂蚁令牌都被替换。

<zip destfile="${your_file_name}" update="true" whenempty="skip">
            <fileset dir="${your_search_directory}">
                    <!-- your file pattern -->
                    <include name="**/*.html" />
                    <!-- this will destroy an executable file. best to exclude them -->
                <exclude name="**/*.jar" />
                <containsregexp expression="your_regex_to_match" />
            </fileset>
        </zip>

答案 1 :(得分:1)

您应该可以使用嵌套ConcatFilterChain任务执行此操作。

这样的事情:

<concat destFile="your_output_file">
    <fileset dir="WebContent">
        <include name="**/*.html"/>
    </fileset>
    <filterchain>
        <linecontainsregexp>
            <regexp pattern="your_pattern_to_match" />
        </linecontainsregexp>
        <tokenfilter>
            <replaceregex pattern="your_pattern_to_extract" replace="output_required" />
        </tokenfilter>
    </filterchain>
</concat>