Я ищу регулярное выражение для анализа идентификатора записи в MongoDB:
{"$oid":"5527b117d3d511091e1735e2"}
Я пытаюсь сделать следующее, но это не удается:
private static final Pattern p = Pattern.compile("\\{\"([a-zA-Z\\d]+)\"\\}");
Matcher m = p.matcher("{\"$oid\":\"5527b117d3d511091e1735e2\"}");
if(!m.find()) {
throw new IllegalArgumentException("The id should be within parenthesis and quotes.");
}
Любая помощь?
Вам нужно включить ключевую часть также в регулярное выражение или просто "\\{\"([a-zA-Z\\d$]+)\":"
потому что [a-zA-Z\\d]+
выиграл 't совпадение между ними :
и рядом с ключевой частью нет закрывающей фигурной скобки.
final Pattern p = Pattern.compile("\\{\"([a-zA-Z\\d$]+)\":\"([^\"]*)\"\\}");
Matcher m = p.matcher("{\"$oid\":\"5527b117d3d511091e1735e2\"}");
if(m.find())
{
System.out.println("Key : " + m.group(1));
System.out.println("Value : " + m.group(2));
}
Вывод:
Key : $oid
Value : 5527b117d3d511091e1735e2
Это сработало для меня
String id = str.replaceAll(".*\"(\\w+)\"}", "$1");
Использовать парсер JSON:
String j = "{\"$oid\":\"5527b117d3d511091e1735e2\"}";
JSONParser p = new JSONParser();
JSONObject o = (JSONObject) p.parse(j);
System.out.println(o.get("$oid"));
Вывод:
5527b117d3d511091e1735e2
Используемая библиотека JSON:
<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.7.1</version>
</dependency>