Я предполагаю, что вы используете функцию String.matches
в Java, которая требует, чтобы вся строка была сопоставлена шаблоном (именно поэтому вы включили .*
до и после шаблон). Поскольку Берги правильно замечен, .
, как правило, не будет соответствовать разрыву строк, поэтому вы не можете получить полное строковое соответствие, не используя DOTALL
.
Но это действительно немного взломать. Вы фактически не заинтересованы в сопоставлении всей строки (это то, что вы делаете для проверки). И Java предоставляет второй метод сопоставления шаблонов, который требует немного больше кода, но позволяет выполнять работу должным образом (поиск совпадений подстрок - и несколько их при необходимости). Вот некоторые быстрый пример кода с фиксированной комбинацией (при условии, str
ваша входная строка):
Pattern pattern = Pattern.compile("resultCount\":\\s*(\\d+)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
Оба Pattern
и Matcher
являются частью java.util.regex
. На основе кода on this tutorial page.
Working demo.
Конечно включение \\s*
в шаблон до вас, но это, безусловно, то, что может произойти, если вы не генерировать JSON себя, и он не может причинить никакого вреда, так как нет перекрытия с \\d
.
Это не выглядит слишком неправильно, хотя квадратные скобки не нужны. Две вещи: на каком языке вы это используете? Ваш вход выглядит подозрительно, как JSON. Не было бы проще/более надежным/более читаемым использовать парсер JSON? –
Почему бы просто не забыть об этих '. *' (Или ваши регулярные выражения привязаны к началу и концу строки)? В некоторых вариантах регулярного выражения точка может даже не соответствовать этой линии ... – Bergi
@buettner. Да, вы правы в важности языка: это регулярное выражение работает отлично, но не в java. Я не хочу, чтобы в этом контексте был полностью обработан парсером json. – javadba