2013-03-08 63 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