请问为什么这个正则没办法匹配上面的字符串
问题描述:
String line = "\"string\": \"Hello World\",";
Matcher m = Pattern.compile("\"(.*)\"\\s?:\\s?\"\\w\"\\s?,?").matcher(line);
请问为什么这个正则没办法匹配上面的字符串
答
你的问题 首先在于没有搞明白什么是 贪婪匹配
,什么是 懒惰匹配
你需要匹配的字符串是 "string": "Hello World",
但你目前的正则是这个 "(.*)"\s?:\s?"\w"\s?,?
就目前来看,你的正则前半部分 "(.*)"
已经完全匹配了所有字符
所以你可以使用懒惰匹配来实现: "(.*?)"\s*:\s*"(.*?)",?
答
目测你的\",这个不行,java转义成",而正则需要继续转义。
.*修改为[^\"]*
答
这个应该是\w的原因吧