你可以試着用身邊的每個子規則括號一次匹配他們。您可以使用該組來確定哪個匹配。
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