你可以试着用身边的每个子规则括号一次匹配他们。您可以使用该组来确定哪个匹配。
public static void main(String... ignored) {
for (String test : "aabaa,wwwaabcdddd,abcddtxyz".split(",")) {
System.out.println(test + " matches " + longestMatch(test, "aab*", "aabc*", "aabcdd*", "dtctddds*", "ddt"));
}
}
public static String longestMatch(String text, String... regex) {
String[] sortedRegex = regex.clone();
Arrays.sort(sortedRegex, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
StringBuilder sb = new StringBuilder();
String sep = "(";
for (String s : sortedRegex) {
sb.append(sep).append('(').append(s).append(')');
sep = "|";
}
sb.append(")");
Matcher matcher = Pattern.compile(sb.toString()).matcher(text);
if (matcher.find()) {
for (int i = 2; i <= matcher.groupCount(); i++) {
String group = matcher.group(i);
if (group != null)
return sortedRegex[i - 2];
}
}
return "";
}
打印
aabaa matches aabc*
wwwaabcdddd matches aabcdd*
abcddtxyz matches ddt
这是转让吗?你有什么尝试? – Swapnil
不,这不是一项任务。这是我同事工作中的一项小任务。我尝试了一些方法,如下面的第一个答案,但我认为这不是最好的方法。 – user1989706