Этот шаблон (?:\b[A-Z]+\b.*){5,10}
соответствует \b[A-Z]+\b
, а затем .*
, что будет соответствовать всем, кроме символа новой строки, поэтому без учета прописных слов.
Если вся строка должна содержать от 5 до 10 слов в верхнем регистре с границами слов, вы можете использовать временный жадный токен , повторенный 5-10 раз, и использовать отрицательный взгляд, чтобы утверждать, что находится на право не в верхнем регистре слово:
^(?:(?:(?!\b[A-Z]+\b).)*\b[A-Z]+\b){5,10}(?!.*\b[A-Z]+\b)
Regex demo
Объяснение
^
Начало строки
(?:
Группа без захвата
(?:
Группа без захвата
(?!\b[A-Z]+\b).
Отрицательный взгляд, подтвердите, что справа не \b[A-Z]+\b
, затем сопоставьте любой символ, кроме новой строки, используя .
)*
Закрыть группу без захвата и повторить 0+ раз
\b[A-Z]+\b
Соответствует границе слова, 1+ раз в верхнем регистре A-Z и границе слова
){5,10}
Закрыть группу без захвата и повторить 5 - 10 раз
(?!.*\b[A-Z]+\b)
Отрицательный взгляд, утверждай, что справа \b[A-Z]+\b
нет