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>"
。我为什么以及如何正确地做到这一点?
答案 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);
答案 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的相应部分。