Она заменяет второе свидание, потому что в вашем регулярном выражении есть жадная последовательность «сопоставить что-либо»:
"(XXXX.*)[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})"
// ^^
// Here
Ответы на на этот вопрос объясняют разницу между жадным и ненасыщеннымжадные (ленивые) квантификаторы.В двух словах:
Стандартные квантификаторы в регулярных выражениях являются жадными, что означает, что они совпадают настолько, насколько могут, и отдают только по мере необходимости, чтобы соответствовать остатку регулярного выражения.
Для вашего ввода это означает, что последовательность .*
будет соответствовать всему, вплоть до строки, содержащей вторую дату.
Поскольку вам не нужно «сопоставлять что-либо», одно решениебыло бы полностью удалить жадную последовательность и поместить последовательность совпадения пробелов в вашу группу захвата:
"(XXXX\\s+)(\\d{1,2}-\\d{1,2}-\\d{4})"
Примечание: нет необходимости ставить \\d
или \\s
внутри класса символов ([\\s]
).