2016-11-21 126 views
-5

我想从java中使用正则表达式从json对象中提取字符串。Java正则表达式不匹配

的字符串看起来是这样的:

{"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。我做错了什么?
在此先感谢

+4

为什么不简单地使用jsonparser或者什么 –

+1

'我需要使用java中的正则表达式从json对象中提取一个字符串......不,您不需要使用JSON解析器。 –

+0

我知道什么是JSON解析器,这不是我问的。 – Plays2

回答

3

有你的代码的两个问题

  1. \b应该\\b

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

在这两点上简单地修复你的代码,然后它就可以工作。测试我自己。

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; 
}