Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 - Fatal编程技术网

Java 帮助使用正则表达式

Java 帮助使用正则表达式,java,regex,Java,Regex,从字符串[foo](bar)中,我想提取foo和bar部分: Pattern p = Pattern.compile("\\[(.*)\\]\\((.*)\\)"); String input = "[foo](bar)"; assert p.matcher(input).matches(); String[] a = ??? // should be initialized to {"foo", "bar"} 要从输入中获取foo和bar,我应该在第四行中写些什么?这将使您接近您想要的位

从字符串
[foo](bar)
中,我想提取
foo
bar
部分:

Pattern p = Pattern.compile("\\[(.*)\\]\\((.*)\\)");
String input = "[foo](bar)";
assert p.matcher(input).matches();
String[] a = ???   // should be initialized to {"foo", "bar"}

要从输入中获取
foo
bar
,我应该在第四行中写些什么?

这将使您接近您想要的位置:

Pattern p = Pattern.compile("\\[(.*)\\]\\((.*)\\)");
String input = "[foo](bar)";
Matcher m = p.matcher(input);
if (m.find()){
    String[] a = { m.group(1), m.group(2) }; 
}

基本上,您将创建一个
匹配器
。然后使用
find()
查找匹配项。然后,您将使用这些组来查找括号内匹配的内容。

我想说,下面这样的正则表达式更易于处理和扩展:

[\[\(](.*?)[\]\)]

您应该使用p.matcher(输入),它将返回一个包含匹配项的对象。然后,您可以使用find()来尝试查找字符串中的下一个组,并使用group()来访问最后一个找到的组。为什么正则表达式组从1开始计数!?然而:+1@Martijn,因为组0将保留整个匹配项。但这只匹配字符串的一部分,而且它还匹配无效部分,如
(foo]
@Bart Kiers-我知道你是对的,但我仍然想说OP要求提取foo和bar。