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。