Java正则表达式 - “()”括号

时间:2012-01-13 20:09:41

标签: java regex

Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find()
String str = matcher.group();

我希望"Text"获得str,但我得到"<a>Text</a>"。我为什么以及如何正确地做到这一点?

6 个答案:

答案 0 :(得分:5)

matcher.group(),没有参数,返回整个匹配的子字符串。使用matcher.group(1)仅检索第一个带括号的捕获组的内容:

Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find();
String str = matcher.group(1);

答案 1 :(得分:4)

您需要指定组的索引,在这种情况下为1:

Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find()
String str = matcher.group(1);

Documentation for Matcher.group(int)

答案 2 :(得分:2)

匹配器上有另一个group()重载。尝试:

matcher.group(1);

答案 3 :(得分:2)

你想要group(1);第一组是整个模式。

请参阅group()group(int)文档。

答案 4 :(得分:2)

group()返回整个匹配的文字。你想要group(1),它返回匹配中第一个以paren为界的组。请参阅API docs

答案 5 :(得分:2)

您必须使用捕获组的编号调用matcher.group - 如果省略该参数,则将返回完整匹配。

最好的问候,carsten

PS: 快速解决这类问题的最佳地址是查找java api docs的相应部分。