【问题标题】:Is there a function to convert an Ant-style glob pattern into a regex?是否有将 Ant 样式的 glob 模式转换为正则表达式的功能?
【发布时间】:2011-12-20 22:14:00
【问题描述】:

我知道我可以自己写一个,但我希望我可以重复使用现有的。

Ant 样式的 glob 与普通文件 glob 几乎相同,只是 '**' 匹配子目录。

FWIW,我的实现是:

public class AntGlobConverter {
    public static String convert(String globExpression) {
        StringBuilder result = new StringBuilder();

        for (int i = 0; i != globExpression.length(); ++i) {
            final char c = globExpression.charAt(i);

            if (c == '?') {
                result.append('.');
            } else if (c == '*') {
                if (i + 1 != globExpression.length() && globExpression.charAt(i + 1) == '*') {
                    result.append(".*");
                    ++i;
                } else {
                    result.append("[^/]*");
                }
            } else {
                result.append(c);
            }
        }

        return result.toString();
    }
}

【问题讨论】:

    标签: java regex ant


    【解决方案1】:

    您似乎正在尝试做这样的事情。

    str.replace( /?/g, "." ).replace( /\*[^\*]/g, "[^/]*" ).replace( /\*\*/, ".*" );
    

    如果你不能使用Ant Contribhttp://ant-contrib.sourceforge.net/tasks/tasks/propertyregex.html,那么试试这个。 这适用于 Java 1.6+。

    <property name="before" value="This is a value"/>
    <script language="javascript">
    //<![CDATA[ 
        var before = project.getProperty("before");
        var result = before.replace( /?/g, "." ).replace( /\*[^\*]/g, "[^/]*" ).replace( /\*\*/, ".*" );
        project.setProperty("after", result);
    //]]>       
    </script>
    <echo>after=${after}</echo>
    

    【讨论】:

      【解决方案2】:

      我最近自己遇到了这个问题,并写了一个方法来进行转换。正确地做到这一点比上面问题中的代码更复杂。

      参见https://github.com/bndtools/bnd/blob/master/aQute.libg/src/aQute/libg/glob/AntGlob.java 中的convertAntGlobToRegEx 方法。

      有关测试用例,请参阅https://github.com/bndtools/bnd/blob/master/aQute.libg/test/aQute/libg/glob/AntGlobTest.java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多