Три предложения:
Если между скобками могут встречаться только строки, то вам вообще не нужно их проверять, просто используйте "[^"]*"
в качестве регулярного выражения и найдите все совпадения (при условии, что кавычек не было).
Если это не сработает, потому что строки могут возникать и в других местах, где вы не хотите их захватывать, сделайте это в два шага.
- Совпадение
\[[^\]]*\]
.
- Найти все вхождения
"[^"]*"
в результате первого совпадения. Или даже используйте анализатор JSON для чтения этой строки.
Третья возможность, немного изменяю:
Поиск "[^"\[\]]*"(?=[^\[\]]*\])
. Это будет соответствовать строке, только если следующая следующая скобка является закрывающей скобкой. Ограничение: скобки не допускаются внутри строк. Я считаю это уродливым, особенно если вы посмотрите, как это будет выглядеть в Java:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\"[^\"\\[\\]]*\"(?=[^\\[\\]]*\\])");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
Как вы думаете, кто-нибудь, кто смотрит на это через несколько месяцев, может сказать, что он делает?