2015-04-10 6 views
1

Я ищу регулярное выражение для разбора идентификатора записи в 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."); 
} 

Любая помощь?

+0

Что ваш ожидаемый результат? –

+0

Использовать парсер JSON. –

+0

@Tichodroma OP уже использует парсер JSON, хотя я не уверен, чего он пытается достичь здесь. Вчера я ответил на [его] (http://stackoverflow.com/questions/29541413/mapping-mongo-id-field-with-google-gson) вопрос. К OP: чего вы хотите достичь здесь? –

ответ

2

Вам необходимо включить ключевую роль также в регулярном выражении или просто потому, что "\\{\"([a-zA-Z\\d$]+)\":"[a-zA-Z\\d]+ не будет соответствовать Inbetween : и там не закрывающая фигурная скобка сразу после ключевой части.

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 
+0

Спасибо, что сработал. – user2824073

1

Это работало для меня

String id = str.replaceAll(".*\"(\\w+)\"}", "$1"); 
+0

Спасибо, что тоже – user2824073

0

Используйте 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> 
Смежные вопросы