代码之家  ›  专栏  ›  技术社区  ›  Santosh

我需要org.sqlite.SQLiteException的正则表达式:[sqlite_CONSTRAINT_UNIQUE]唯一约束失败

  •  -5
  • Santosh  · 技术社区  · 6 年前

    我只想在“org.sqlite.SQLiteException:[sqlite_constraint_UNIQUE]唯一约束失败(唯一约束失败:Items.Name)”中作为tack输入输出“唯一约束失败” 对于这种类型的输出 正则表达式 必修的。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Tony Stark    6 年前

    它只匹配 ] (

    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));
        }
    }
    
        2
  •  0
  •   DevilsHnd - 退した    6 年前

    如果要检索字符串中位于其他两个子字符串之间的子字符串,则可以使用 Quotation constructs ( \\问 \\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";
    

    在引号结构之间放置什么完全取决于您,这完全取决于您希望检索的子字符串有多精确,特别是如果您已经知道完整的输入字符串将包含什么。很可能是从异常中收集输入字符串 捕获 而且您很可能会发现库倾向于遵循标准的异常消息传递样式,因此很可能有多个异常消息包含在一个闭方括号之间的子字符串( )还有一个圆括号( ( ). 当然,如果您确保捕获的异常字符串是您希望在通过模式/匹配之前处理的字符串,那么这并不重要。但是,如果是这样的话,为什么还要解析异常字符串呢?只要把你喜欢的线送回去就行了。

    // 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

    你可以在这里玩这个短语 regular expression 101