0

GUI を介してユーザーに公開できるパターンの一種である、「簡単な」パターン マッチングを実行できるライブラリを探しています。

* のような単純な一致構文を定義する必要があります。任意の文字と同様に一致します。

つまり、sun の実装ロジックhttp://openjdk.java.net/projects/nio/javadoc/java/nio/file/PathMatcher.htmlのようにグロブ (グロビング) を実行したいのですが、ファイル システムとは関係ありません。

アイデア?

4

3 に答える 3

0

このhttp://jakarta.apache.org/oro/api/org/apache/oro/text/GlobCompiler.htmlのApacheCommonsクラスを見つけたと思います

于 2010-06-15T16:02:07.487 に答える
0

「含む」関係を拡張するパターン マッチングは、ユーザーにとって常に困難です。ユーザーが理解できるのは、任意のデータに対する「*」と「?」の単純な使用法です。ちょうど 1 つの任意の文字。

それは SQL の「いいね」のようなもので、私は本当に「いいね」をユーザーに公開したいと思っています。

于 2010-06-15T15:58:39.600 に答える
0

* と ? のみを使用する単純なグロブの場合 特殊文字として、まったく新しいライブラリを取り込まなくても、それらを正規表現パターンに簡単に変換できるはずです。次のコードはテストされていませんが、SQL の "like" 式を正規表現に変換するために非常によく似たものを使用しました。

public static boolean globMatches(String glob, String target) {
    Pattern p = Pattern.compile("(\\*+)|(\\?)|([^*?]+)");
    Matcher m = p.matcher(glob);
    StringBuilder sb = new StringBuilder();
    while (m.find()) {
        String star = m.group(1);
        String question = m.group(2);
        String text = m.group(3);
        if (star != null) {
            sb.append(".*");
        }
        else if (question != null) {
            sb.append(".");
        }
        else {
            sb.append(Pattern.quote(text));
        }
    }

    return target.matches(sb.toString());
}
于 2010-06-15T20:53:02.930 に答える