Java简单通配符匹配
我正在制作一个java IRC库,我需要一个方法来查看某个用户是否匹配可以包含通配符Java简单通配符匹配,java,regex,wildcard,Java,Regex,Wildcard,我正在制作一个java IRC库,我需要一个方法来查看某个用户是否匹配可以包含通配符*字符的主机掩码。不使用regex最简单的方法是什么 一些例子: // Anything works * server.freenode.net ✔ // Any nickname/user/host works *!*@*: any!thing@works ✔ // Any nickname works (may hav
*
字符的主机掩码。不使用regex最简单的方法是什么
一些例子:
// 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 ✘
结果是:
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;
}
使用org.apache.commons.io.FilenameUtils#wildcardMatch()方法。答案中有更多细节。为什么不使用正则表达式?这看起来像是正则表达式的完美匹配。@TomJohnson我认为特殊字符可能会干扰,我必须处理这个问题。由于它只有一个通配符,我认为没有regex它会更简单?您总是可以转义特殊字符…请注意,当
host
是abcdef
并且mask
是abc
时,该函数的答案仍然是“true”。