Функция matcher.group()
ожидает принятия целочисленного аргумента: индекс группы захвата, начиная с 1. Индекс 0 является специальным, что означает «все совпадение». Группа захвата создается с использованием пары скобок «(...)
». Все, что находится в скобках, захватывает. Группы нумеруются слева направо (опять же, начиная с 1), открывая скобки (что означает, что группы могут перекрываться). Поскольку в вашем регулярном выражении нет скобок, не может быть группы 1.
В javadoc класса Pattern распространяется синтаксис регулярных выражений.
Если вы ищете шаблон, который может повторяться некоторое количество раз, вы можете повторно использовать Matcher.
find(), пока он не вернет false. Matcher.group(0)
один раз на каждой итерации будет возвращать то, что соответствовало этому времени.
Если вы хотите создать одно большое регулярное выражение, которое соответствует всем всем сразу (которое, как я считаю, вам нужно), то вокруг каждого из трех наборов вещей, которые вы хотите захватить, поместите набор захватывающих круглых скобок, используйте Matcher.match()
, а затем Matcher.group(n)
, где n равно 1, 2 и 3 соответственно. Конечно, Matcher.match()
также может возвращать false, и в этом случае шаблон не соответствует, и вы не можете получить какую-либо из групп.
В вашем примере, что вы, вероятно, захотите сделать, это соответствовать предыдущему тексту, затем начать группу захвата, сопоставить цифры, завершить группу захвата и т. Д. ... Я не знаю достаточно о вашем точном формат ввода, но вот пример.
Позволяет сказать, что я имел строки вида:
Eat 12 carrots at 12:30
Take 3 pills at 01:15
И я хотел, чтобы извлечь количество и время.Мое регулярное выражение будет выглядеть примерно так:
"\w+ (\d+) [\w ]+ (\d{1,2}:\d{2})"
Код будет выглядеть примерно так:
Pattern p = Pattern.compile("\\w+ (\\d+) [\\w ]+ (\\d{2}:\\d{2})");
Matcher m = p.matcher(oneline);
if(m.matches()) {
System.out.println("The quantity is " + m.group(1));
System.out.println("The time is " + m.group(2));
}
Регулярное выражение означает «строку, содержащую слово, пробел, один или более цифр (которые захвачен в группе 1), пробел, набор слов и пробелов, заканчивающихся пробелом, за которым следует время (зафиксированное в группе 2, а время предполагает, что час всегда 0-дополняется до 2-х цифр). более близкий пример того, что вы ищете, но описание возможного ввода немного расплывчато.
Можете ли вы показать свой код? Это должно совпадать с 06:30, если все остальное в порядке. –