Почему matcher возвращает false?

имеется тест:

    @Test
    public void sixTest() {
        Specification.installSpec(Specification.requestSpec(), Specification.responseSpec());
        Response response = given()
                .when()
                .get("/api/unknown")
                .then()
                .log().all()
                .extract().response();

        String value = response.path("data.color").toString();

        String patternString = "#[0-9A-Z]{6}";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(value);

        boolean matches = matcher.matches();
        assertTrue(matches);

    }

На выходе получаю matches false, почему? Ведь шаблон patternString соответствует полученному ответу. Т е в value содержится 6 значений из get запроса, дальше они проверяются на соответствие шаблона в matcher, но почему matcher возвращает false?

Вот responce:

{
    page: 1,
    per_page: 6,
    total: 12,
    total_pages: 2,
    data: [
    {
    id: 1,
    name: "cerulean",
    year: 2000,
    color: "#98B2D1",
    pantone_value: "15-4020"
    },
    {
    id: 2,
    name: "fuchsia rose",
    year: 2001,
    color: "#C74375",
    pantone_value: "17-2031"
    },
    ... 

Ответы (2 шт):

Автор решения: Vitaly Zotov

Результат выполнения этого кода:

String value = response.path("data.color").toString();

будет массив всех найденных значений data.color.
В вашем примере их как минимум 2.
То есть, это будет строка типа [#98B2D1, #C74375, ...].
Эта строка целиком не соответствует заданному регулярному выражению.

→ Ссылка
Автор решения: Alex Rudenko

Почему matcher возвращает false?

Потому что метод Matcher::matches проверяет всю строку целиком:

public boolean matches​()
Attempts to match the entire region against the pattern.
If the match succeeds then more information can be obtained via the start, end, and group methods.
Returns: true if, and only if, the entire region sequence matches this matcher's pattern

Если нужно найти количество совпадений, в Java 9 и выше можно выполнить такой код:

String value = given()
                .when()
                .get("/api/unknown")
                .then()
                .log().all()
                .extract().asString();

Pattern pattern = Pattern.compile("#[0-9A-Z]{6}");
Matcher matcher = pattern.matcher(value);

assertEquals(6, matcher.results().count());
→ Ссылка