我正在尝试使用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。我做错了什么?
提前谢谢
答案 0 :(得分:3)
您的代码存在两个问题
\b
应为\\b
您应该使用find()
而不是matches()
。第一个将对给定的字符串进行搜索,并在找到与正则表达式匹配的子字符串时停止。第二个将搜索整个字符串。由于提供的正则表达式与完整字符串不匹配,matches()
不起作用。
只需在这两点上修复您的代码,然后就可以了。自己测试过。
答案 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;
}