Вы не должны быть прохождение Pattern.DOTALL
; что приводит к тому, что символы новой строки соответствуют .*
, что именно то, что вы не хотите здесь.
Лучше регулярное выражение будет:
Pattern pattern = Pattern.compile("faultString: (.*)");
, а затем, вместо matcher.matches()
, используйте find()
, чтобы увидеть, если он появляется в любом месте строки.
Обратите внимание, что я изменил регулярное выражение только для группировки части «Моя ошибка», вместо «: Моя ошибка», как у вашего оригинала.
Просто чтобы быть ясно, вот код, я тестировал:
Pattern pattern = Pattern.compile("faultString: (.*)");
Matcher matcher = pattern.matcher(errorString);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
errorString
, где такая же, как ваша.
Выход:
My Error
Это то, что я ищу. все еще любопытно, как заставить его работать со спичками. –
С match() вы должны использовать «. * FaultString: ([^ \\ n] *). *" С Pattern.DOTALL, как описано Крисом Торнхилом и Майком Дигдоном. –
Но я предпочитаю не использовать лишние точки, если я могу помочь (см. Статью Дж. Гойваертса http://www.regular-expressions.info/dot.html). В этом случае это не будет иметь никакого значения, но для будущей ссылки просто попробуйте сопоставить то, что вам нужно. (Также я бы предпочел вытащить объект Pattern в статическую конечную переменную, чтобы не перекомпилировать ее при каждом вызове.) –