2011-06-09 21 views
7

En primer lugar me hizo esto -coincidencia de patrones para la cadena que tiene "{"

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}"; 

     Assert.assertTrue(str.matches("{\"hits\":[{\"links_count\":[0-9]{1,},\"forum_count \":11}],\"totalHitCount\":[0-9]{1,}}"), 
      "Partnership message does not appear"); 

Esto me consiguió siguiente error -

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition 
{"hits":[\{"links_count":[0-9]{1,},"forum_count":11}],"totalHitCount":[0-9]{1,}} 

Entonces hice (escapa a la "{") -

String str = "\\{\"hits\":[\\{\"links_count\":6,\"forum_count\":11\\}],\"totalHitCount\":1\\}"; 

    Assert.assertTrue(str.matches("\\{\"hits\":[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}],\"totalHitCount\":[0-9]{1,}\\}"), 
      "Partnership message does not appear"); 

y obtuvo el siguiente error -

Exception in thread "main" java.lang.AssertionError: Partnership message does not appear expected:<true> but was:<false> 

¿Qué me falta aquí?

Respuesta

5

No necesita escapar {[ en su entrada. Pero necesita escapar [] en su expresión regular.

Prueba esto:

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}"; 

System.out.println(str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}\\],\"totalHitCount\":[0-9]{1,}\\}")); 
3

Tiene razón al escapar de las llaves dentro de su expresión regular (la cadena dentro de matches("...")), ya que de lo contrario se interpretan como repetición de patrones.

No debe, sin embargo, escapar de las llaves dentro de str sí mismo, ya que eso solo romperá las cosas en su caso.

Hay esta bonita online tool que puede serle útil para depurar la expresión regular de Java.

3

La expresión regular correcta es:

str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]+,\"forum_count\":[0-9]+\\}\\],\"totalHitCount\":[0-9]+\\}") 
0

Usted faltaban los corchetes []

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}"; 

Esta volverán cierto

Assert.assertTrue(str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}\\],\"totalHitCount\":[0-9]{1,}\\}"),"Partnership message does not appear"); 
Cuestiones relacionadas