A java.util.regex.Matcher
пытается найти совпадения в области , которая по умолчанию используется для всего входа, но может быть явно задана для определенного поддиапазона.
Из документации:
Сопоставитель находит совпадения в подмножестве своего ввода, которое называется region . По умолчанию область содержит все входные данные сопоставителя. Регион можно изменить с помощью метода region(int start, int end)
и запросить с помощью методов regionStart
и regionEnd
. Способ, которым границы области взаимодействуют с некоторыми конструкциями образца, может быть изменен. Подробнее см. useAnchoringBounds
и useTransparentBounds
.
Помните, что, как и многие методы в классах библиотеки Java, индекс start
равен включительно , но индекс end
равен эксклюзиву .
Отрывок
Вот пример использования:
String text = "012 456 890 234";
Pattern ddd = Pattern.compile("\\d{3}");
Matcher m = ddd.matcher(text).region(3, 12);
while (m.find()) {
System.out.printf("[%s] [%d,%d)%n",
m.group(),
m.start(),
m.end()
);
}
Приведенные выше отпечатки ( как видно на ideone.com ):
[456] [4,7)
[890] [8,11)
О границах привязки и прозрачных границах
Как уже упоминалось ранее, когда вы указываете регион, вы можете изменить поведение некоторых шаблонных конструкций в зависимости от того, что вам нужно.
привязка границы делает границы области соответствующими различным сопоставлениям границ (^
, $
и т. Д.).
непрозрачная граница по существу отсекает остальную часть входных данных от предвкушений, видовых взглядов и определенных конструкций сопоставления границ. С другой стороны, в режиме прозрачный им разрешено видеть символы за пределами области по мере необходимости.
По умолчанию Matcher
использует как привязку , так и непрозрачные границы. Это применимо к большинству сценариев сопоставления субрегионов, но вы можете установить свою собственную комбинацию в зависимости от ваших потребностей.