Повтор нескольких примеров прояснит вам функционирование matcher.find()
:
Движок Regex берет один символ из строки (т.е. ababa) и пытается найти, найден ли искомый шаблон в строке или нет. Если шаблон существует, то (как упомянуто API):
matcher.start () возвращает начальный индекс,
matcher.end () возвращает смещение после последнего найденного символа.
Если совпадений не существует. затем start () и end () возвращают один и тот же индекс, который должен соответствовать согласованной длине, равной нулю.
Посмотрите на следующие примеры:
// Searching for string either "a" or ""
Pattern pattern = Pattern.compile("a?");
Matcher matcher = pattern.matcher("abaabbbb");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
Выход:
0[a]1
1[]1
2[a]3
3[a]4
4[]4
5[]5
6[]6
7[]7
8[]8
// Searching for string either "aa" or "a"
Pattern pattern = Pattern.compile("aa?");
Matcher matcher = pattern.matcher("abaabbbb");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
Выход:
0[a]1
2[aa]4