Получите лучший групповой матч с помощью RegexJAVA

Программисты JAVA общаются здесь
Anonymous
Получите лучший групповой матч с помощью Regex

Сообщение Anonymous »

У меня есть синтаксическая строка, в которой есть группы, определенные в ней, но я хочу получить возможное «лучшее» матч. В настоящее время он просто находит первый матч, который работает и использует его, но это не то, что я хочу. Я хочу, чтобы он использовал совпадение, которое соответствует ему еще больше.
Это то, что у меня есть: < /p>

Код: Выделить всё

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) {
Pattern pattern = Pattern.compile("add ((?.*)|random (?.*) to (?.*)) to (?.*)");
String test1 = "add random 5 to 6 to variable";
String test2 = "add 5 / 3 to variable";
String test3 = "add random 0 to players online to variable";
String test4 = "add player hand to {mugs}";
String test5 = "add members added to {total members}";
String[] groups1 = extractGroups(pattern, test1, 4);
String[] groups2 = extractGroups(pattern, test2, 4);
String[] groups3 = extractGroups(pattern, test3, 4);
String[] groups4 = extractGroups(pattern, test4, 4);
String[] groups5 = extractGroups(pattern, test5, 4);
System.out.println(Arrays.toString(groups1));
System.out.println(Arrays.toString(groups2));
System.out.println(Arrays.toString(groups3));
System.out.println(Arrays.toString(groups4));
System.out.println(Arrays.toString(groups5));
}

private static String[] extractGroups(Pattern pattern, String string, int groups) {
String[] groupList = new String[groups];
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
for (int i = 0; i < groups; i++) {
String groupName = "n" + i;
groupList[i] = matcher.group(groupName);
}
}
return groupList;
}

}
This gets me:


Test1: [random 5 to 6, null, null, variable]

Test2: [5 / 3, null, null, variable]

Test3: [random 0 to players online, null, null, variable]

test4: [рука игрока, null, null, {mugs}]

test5: [добавлены участники, null, null, {total memport}] < /p>
< /blockquote>

Но я хочу получить: < /p>


5, 6, variable]

Test2: [5 / 3, null, null, variable]

Test3: [null, 0, players online, variable]

Test4: [player hand, null, null, {mugs}]

Test5: [members added, null, null, {total members}]
< /blockquote>

Что я могу сделать, чтобы изменить это?

Подробнее здесь: https://stackoverflow.com/questions/350 ... sing-regex

Вернуться в «JAVA»