这是我原来的名为'response'的字符串:
String response = "attributes[{"displayName":"Joe Smith","fact":"super"},{"displayName":"Kieron Kindle","fact":"this is great"}]";
我正在尝试解析String并提取所有id值,例如
String[0] = Joe Smith
String[1] = Kieron Kindle
Pattern idPattern = Pattern.compile("\"displayName\":(\\w)"); // regular expression
Matcher matcher = idPattern.matcher(response);
while(matcher.find()){
System.out.println(matcher.group(1));
}
当我尝试打印该值时,屏幕上没有任何内容(也不例外)
正则表达式将"displayName":"
视为左括号,将"
视为右括号,然后在它们之间提取任何单词(\\w)
?
感谢任何帮助!
从我的正则表达式中删除了\n
个字符,这是一个格式错误,对不起家伙!
答案 0 :(得分:1)
但为什么你在正则表达式中使用了\n
?那应该是\"
。您还使用了\\w
,它只匹配一个字符。你需要使用量词。还有Reluctant one
。
所以,你修改过的正则表达式是这样的: -
Pattern.compile("\"displayName\":\"(\\w+?)\""); // This won't consider space
但是,由于您的String
也可以包含空格,因此您不应使用\\w
。它与空格不匹配。
所以,最后,你应该使用这个正则表达式,它匹配两个引号之间的任何字符,除了inverted comma
本身: -
Pattern.compile("\"displayName\":\"([^\"]+)\"");
在您的代码中替换上述模式后,您的输出将如下所示: -
"Joe Smith"
"Kieron Kindle"
您可以在这些教程中阅读有关Regex的更多信息: -
答案 1 :(得分:0)
您应该使用此regex
\"displayName\":\"(.*?)\"
(.*?)
匹配0到多个字符
或 [纠正你的正则表达式]
\"displayName\":\"([\w\s]+)\"
([\w\s]+)
匹配一个单词,\w
或一个空格,即\s
1到多次,+
Group1
现在有数据