мне нужно регулярное выражение для org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE] Не удалось выполнить ограничение UNIQUE - PullRequest
0 голосов
/ 26 августа 2018

я хочу напечатать только «Не удалось выполнить ограничение UNIQUE» это сообщение как вывод в «org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE] Не удалось выполнить ограничение UNIQUE (ограничение UNIQUE: Items.Name)» в качестве вводного тэка для этого типавывод регулярное выражение требуется.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Если вы хотите извлечь подстроку внутри строки, которая находится между двумя другими подстроками, вы можете использовать Конструкции кавычек ( \\ 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));
}

Объяснение регулярного выражения:

enter image description here

Вы можетепоиграйте с этим выражением здесь в регулярное выражение 101 .

0 голосов
/ 26 августа 2018

Это просто соответствует строке между ] и ( и должно быть началом.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\\] (.*) \\(";
final String string = "org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE] A UNIQUE constraint failed (UNIQUE constraint failed: Items.Name)";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...