1

*Java IRC libを作成していますが、特定のユーザーがワイルドカード文字を含むことができるホストマスクと一致するかどうかを確認するメソッドが必要です。正規表現を使用せずにこれを行う最も簡単な方法は何ですか?

いくつかの例:

    // Anything works
    *
            server.freenode.net ✔

    // Any nickname/user/host works
    *!*@*:
            any!thing@works ✔

    // Any nickname works (may have multiple nicknames on the same user)
    *!nebkat@unaffiliated/nebkat:
            nebkat!nebkat@unaffiliated/nebkat ✔
            123456!nebkat@unaffiliated/nebkat ✔
            nebkat!nebkat@unaffiliated/hacker ✘

    // Anything from an ip
    *!*@123.45.67.8:
            nebkat!nebkat@123.45.67.8 ✔
            123456!user2@123.45.67.8 ✔
            nebkat!nebkat@87.65.43.21 ✘

    // Anything where the username ends with nebkat
    *!*nebkat@*
            nebkat!nebkat@unaffiliated/nebkat ✔
            nebkat!prefix_nebkat@unaffiliated/nebkat ✔
            nebkat!nebkat_suffix@unaffiliated/nebkat ✘
4

2 に答える 2

3

org.apache.commons.io.FilenameUtils#wildcardMatch()メソッドを使用します。詳細については、回答https://stackoverflow.com/a/43394347/466677をご覧ください。

于 2017-04-13T14:04:01.083 に答える
2

これで終わった:

public static boolean match(String host, String mask) {
    String[] sections = mask.split("\\*");
    String text = host;
    for (String section : sections) {
        int index = text.indexOf(section);
        if (index == -1) {
            return false;
        }
        text = text.substring(index + section.length());
    }
    return true;
}
于 2013-01-14T22:04:39.313 に答える