Если вы хотите извлечь подстроку внутри строки, которая находится между двумя другими подстроками, вы можете использовать Конструкции кавычек ( \\ Q и \\ E ) в вашей строке регулярного выражения.Это позволяет вам быть очень точным в получении подстроки, которую вы действительно хотите, например:
// Speculative Exception String:
String inputString = "org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE] A UNIQUE "
+ "constraint failed (UNIQUE constraint failed: Items.Name)";
String regEx = "\\Q[SQLITE_CONSTRAINT_UNIQUE] \\E(.*?)\\Q(UNIQUE constraint failed\\E";
То, что вы помещаете между конструкциями Quotation, зависит только от вас, все зависит от того, насколько точной вы хотитебыть с какой подстрокой вы получаете, особенно если вы уже знаете, что будет содержать полная входная строка.Скорее всего, вы собираете входную строку из исключения Catch и, скорее всего, обнаружите, что библиотеки, как правило, следуют стандартному стилю обмена сообщениями об исключениях, и поэтому вполне может быть несколько сообщений об исключениях, содержащихподстрока между закрытой квадратной скобкой (] ) и открывающей скобкой ( (). Это, конечно, не имеет большого значения, хотя, если вы убедитесь, что захваченная строка исключения является той, которую вы хотитеобработать перед передачей через Pattern / Matching. Но опять же, если это так, зачем вообще разбирать строку исключения? Просто отправьте обратно любую строку, какую захотите.
Вот способ, которым я мог бы сделать это:
// Speculative Exception String:
String inputString = "org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE] A UNIQUE "
+ "constraint failed (UNIQUE constraint failed: Items.Name)";
// Remove any Unicode Control Characters from string
// (should there be any).
inputString = inputString.replaceAll("\\p{Cntrl}", "");
String regEx = "\\Q[SQLITE_CONSTRAINT_UNIQUE] \\E(.*?)\\Q(UNIQUE constraint failed\\E";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(inputString);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
Объяснение регулярного выражения:
Вы можетепоиграйте с этим выражением здесь в регулярное выражение 101 .