Java正则表达式不匹配

时间:2016-11-21 04:28:58

标签: java regex

我正在尝试使用java中的regexs从json对象中提取字符串。

字符串如下所示:

{"key":"value"}

正则表达式方法代码如下所示:

public String extractVal(String dataRaw) {
    Pattern p = Pattern.compile(":\"(.+\b)");
    Matcher m = p.matcher(dataRaw); //dataRaw is string from above^
    if (m.matches()) {
        return m.group(1);
    }
    return null;
}

它总是返回null。我做错了什么?
提前谢谢

2 个答案:

答案 0 :(得分:3)

您的代码存在两个问题

  1. \b应为\\b

  2. 您应该使用find()而不是matches()。第一个将对给定的字符串进行搜索,并在找到与正则表达式匹配的子字符串时停止。第二个将搜索整个字符串。由于提供的正则表达式与完整字符串不匹配,matches()不起作用。

  3. 只需在这两点上修复您的代码,然后就可以了。自己测试过。

答案 1 :(得分:0)

使用text2re.com找到答案

public String extractVal(String dataRaw) {
    String re1=".*?";   // Non-greedy match on filler
    String re2="(?:[a-z][a-z]+)";   // Uninteresting: word
    String re3=".*?";   // Non-greedy match on filler
    String re4="((?:[a-z][a-z]+))"; // Word 1
    Pattern patt = Pattern.compile(re1+re2+re3+re4,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher matc = patt.matcher(dataRaw);
    if (matc.find()) {
        return matc.group(1);
    }
    return null;
}

仍然不确定我搞砸了什么。

编辑:更好的解决方案:

public String extractVal(String dataRaw) {
    String test = ".+:\"(.+)\"";
    Pattern patt = Pattern.compile(test,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher matc = patt.matcher(dataRaw);
    if (matc.find()) {
        return matc.group(1);
    }
    return null;
}