Java 正则表达式找不到所需的字符串

Java 正则表达式找不到所需的字符串,java,regex,Java,Regex,您好,我正在尝试在java中匹配以下字符串: echo "a"b 使用这个乏味的正则表达式: String SPACE_REGEX = "[^\\s]+|\\s\"([^\"]*)\"|\\s\"([^\"]*)\"[^\\s]+"; 问题在于第二个匹配器.find(),匹配器能够将组(1)匹配到“a”,但是组(2)无法找到字符串“a”b 下面是测试代码: Pattern regex = Pa

您好,我正在尝试在java中匹配以下字符串:

echo "a"b
使用这个乏味的正则表达式:

String SPACE_REGEX = "[^\\s]+|\\s\"([^\"]*)\"|\\s\"([^\"]*)\"[^\\s]+";
问题在于第二个
匹配器.find()
,匹配器能够将
组(1)
匹配到
“a”
,但是
组(2)
无法找到字符串
“a”b

下面是测试代码:

Pattern regex = Pattern.compile(SPACE_REGEX);
Matcher regexMatcher = regex.matcher(str);
while (regexMatcher.find()) {
     System.out.println(regexMatcher.group(1) + " " + regexMatcher.group(2));
}
以下是输出:

null null 
a null
null null
谁能看看这个正则表达式吗?我已经在OnlineLegXTest上尝试了Group2正则表达式,它确实有效,但我不明白为什么它在java中不起作用

更新

我尝试的是在这样的命令中匹配带引号的字符串
“a”

echo "a" b or echo "a"
但不是在

echo b"a"b or echo "a"b
我将用匹配器结果进行检查,如

if (matcher.group(1) != null && matcher.group(2) == null) 
    print("found")
试试这个:

String SPACE_REGEX = "\\s\"([^\"]*)\"(?:\\s|$)";
这将匹配一个空格,然后是带引号的字符串,然后是空格或字符串的结尾


字符串的内容将在
组(1)

中,第三个备选方案将永远不会匹配,因为第二个备选方案将匹配第一个。仅供参考,
[^\\s]
可以简化为仅
\\s
当您在regexp中有备选方案时,一次只能匹配其中一个。因此,您不能在同一个匹配中同时获得
组(1)
组(2)
。为什么您希望找到
“a”b
?输入中没有显示该内容。@anubhava很抱歉第一次没有说清楚,现在已经更新了。它工作得很好!非常感谢你!