2011-06-09 26 views
7

Öncelikle Bunu yapan - Odesen "{"

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

yaptım ("{" kaçar) - -

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"); 

Bu bana aşağıdaki hata var

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"); 

ve aşağıdaki hatayı aldık -

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

Burada nelerin eksik?

cevap

5

Sen girişte {[ kaçmaya gerek yok. Ancak, regex'inizde []'dan kurtulmanız gerekir.

bu deneyin:

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

Düzenli ifadenizdeki küme parantezlerinden (matches("...") içindeki dize) kaçmak için doğruyunuz, aksi halde desen tekrarı olarak yorumlanırlar. bu sadece sizin durumunuzda şeyler kırarım olarak

Bununla birlikte, str içine kendini küme parantezi kaçırmamalıyız.

Java düzenli ifade ayıklama de yararlı olabilir, bu güzel online tool yoktur.

3

doğru regexp'in geçerli:

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

Sen eksik Köşeli parantezler []

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

Bu doğrudur

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