0

这是我的原始字符串,名为“响应”:

String response = "attributes[{"displayName":"Joe Smith","fact":"super"},{"displayName":"Kieron Kindle","fact":"this is great"}]";

我正在尝试解析字符串并提取所有 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字符,这是一个格式错误,对不起各位!

4

2 回答 2

1

但是为什么你\n在你的正则表达式中使用了 a 呢?那应该是\"。您还使用\\w了仅匹配单个字符的。你需要使用一个量词。和一个Reluctant one

所以,你修改的正则表达式是这样的: -

Pattern.compile("\"displayName\":\"(\\w+?)\""); // This won't consider space

但是,由于你String也可以包含空间,所以你不应该使用\\w. 它不会匹配空格。

所以,最后,你应该使用这个正则表达式,它匹配两个引号之间的任何字符,除了inverted comma它自己: -

Pattern.compile("\"displayName\":\"([^\"]+)\"");

在您的代码中替换上述模式后,您的输出将如下所示: -

"Joe Smith"
"Kieron Kindle"

您可以在这些教程中阅读有关 Regex 的更多信息:-

于 2012-11-09T18:04:38.043 回答
0

你应该使用这个regex

\"displayName\":\"(.*?)\"

(.*?)匹配 0 到多个字符

[更正您的正则表达式]

\"displayName\":\"([\w\s]+)\"

([\w\s]+)匹配单词 ie\w 空格 ie \s1 到多次 ie+

Group1现在有数据

于 2012-11-09T18:04:32.530 回答