Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,正则表达式捕获带空格的字符串_Java_Regex_String - Fatal编程技术网

Java,正则表达式捕获带空格的字符串

Java,正则表达式捕获带空格的字符串,java,regex,string,Java,Regex,String,这是名为“response”的原始字符串: 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

这是名为“response”的原始字符串:

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
字符,这是一个格式化错误,对不起,伙计们

您应该使用这个
regex

\"displayName\":\"(.*?)\"
(.*)
将0与多个字符匹配

[更正正则表达式]

\"displayName\":\"([\w\s]+)\"
([\w\s]+)
匹配一个单词,即
\w
或一个空格,即
\s
1到多次,即
+


Group1
现在有了数据

但是为什么在正则表达式中使用
\n
?这应该是
\”
。您还使用了只匹配一个字符的
\\w
。您需要使用一个量词。还有一个
量词

因此,修改后的正则表达式如下所示:-

Pattern.compile("\"displayName\":\"(\\w+?)\""); // This won't consider space
"Joe Smith"
"Kieron Kindle"
但是,由于您的
字符串
也可以包含空格,因此不应使用
\\w
。它与空格不匹配

最后,您应该使用这个正则表达式,它匹配两个倒逗号之间的任何字符,除了
倒逗号
本身:-

Pattern.compile("\"displayName\":\"([^\"]+)\"");
在代码中替换上述模式后,您的输出如下:-

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

您可以在以下教程中阅读有关正则表达式的更多信息:-


您应该使用JSON解析器。@Fake.It.Til.U.Make.It,更新的问题来删除
\n
@bobbyrne01
(\\w)
匹配单个单词,即
字母表
数字
。您的正则表达式失败,因为
\\w
将不匹配
等四元组,
*
将0或1匹配到多个times@Fake.It.Til.U.Make.It,我选择了Rohit Jain的答案,为输入干杯!非常好,谢谢!这部分做什么检查
[^\“]
[]
是一个字符类。
^
内部用于求反。
\“
用于倒逗号
(”
)。因此,该模式表示
除“
以外的任何字符。当然,两个
倒逗号之间的字符串不包含右倒逗号。所以,这个模式。