2013-03-08 62 views
0

正則表達式我想匹配具有模式匹配的java變量

{"id":"362237- 
any number of characters followed by 
"http//:www.abc.com" 
any number of characters followed by 
"id":"364121- 
any number of characters followed by 
"http://www.efg.com" 

我想匹配上面的圖案下面的字符串任何字符串。

[{"id":"362237-13","http//:www.abc.com"},{"id":"364075-13","http://www.xyz.com"},{"id":"364121-13","http://www.efg.com"}] 

代碼:

String pttrn=".*{\"id\":"362237-.*\"http//:www.abc.com\".*\"id\":"364121-.*\"http://www.efg.com\".*"; 

String mtchr="[{\"id\":\"362237-13\",\"http//:www.abc.com\"},{\"id":\"364075-13\",\"http://www.xyz.com\"},{\"id\":\"364121-13\",\"http://www.efg.com\"}]"; 


     boolean b = Pattern.matches(pttrn, mtchr); 
     System.out.println("b is !!" + b); 

我期待b可能是真實的,但它返回false。我有正確的錯誤。

請讓我知道如何解決它。

感謝

+1

你確定你想'http:\\'而不是'http://'。另外,當定義一個模式時,你必須小心'\\',因爲它是字符串的轉義字符,所以在你的字符串'pttrn'內'\\'將被轉義爲'\'... – Lucas 2013-03-08 17:56:06

+0

fixed http:\\到http:// – SUM 2013-03-08 18:09:24

+0

你想要什麼?要反序列化一些JSON?如果是這樣,爲什麼不使用像谷歌GSON這樣的一些庫? – davidbuzatto 2013-03-08 18:10:21

回答

0

你需要逃避你的花括號用反斜槓的正則表達式引擎。 ...你需要用另一個反斜槓將反斜槓轉義爲Java。

String pttrn=".*\\{\"id\":\"362237-.*\"http//:www.abc.com\".*\"id\":\"364121-.*\"http://www.efg.com\".*"; 
String mtchr="[{\"id\":\"362237-13\",\"http//:www.abc.com\"},{\"id\":\"364075-13\",\"http://www.xyz.com\"},{\"id\":\"364121-13\",\"http://www.efg.com\"}]"; 
boolean b = Pattern.matches(pttrn, mtchr); 
System.out.println("b is !!" + b); 
+0

如果一個正確的答案沒有得到跟進和接受,這是一個悲傷的日子。 – chrsalln 2014-12-20 01:43:59

+0

或觀看了128次(甚至數過),甚至沒有投票。 – chrsalln 2015-09-10 18:24:38