Поскольку вы можете вводить шаблон только без использования групп, вы можете использовать конечное повторение, например {0,1000}
в положительном просмотре назад, поскольку Java не поддерживает бесконечное повторение.
(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])
Объяснение
(?<=
Положительный просмотр назад, утверждение, что слева - ^\[
Начало строки, совпадение [
[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},
Соответствует 3 раза любому символу, кроме ,
, за которым следует ,
\h{0,10}
Соответствует 0-10 раз горизонтальному пробельному символу
)
Близкий поиск назад \w{3,10}
Соответствие 3–10 символов слов (?=
Положительный просмотр вперед, подтверждение того, что справа - [^\]\[]*\]
Соответствие до ]
)
Закрыть просмотр вперед
Java демо
Пример кода
final String regex = "(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])";
final String string = "[1, 1111, 2020, BMW, Frontier, EXTENDED CAB PICKUP 2-DR, Silver, 16558]";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
Выход
BMW