Java 正则表达式找不到所需的字符串
您好,我正在尝试在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
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很抱歉第一次没有说清楚,现在已经更新了。它工作得很好!非常感谢你!