正则表达式 - Matcher.Group如何工作

时间:2014-11-21 11:11:25

标签: java regex

给出以下正则表达式和字符串

String regex = "Your fax has been successfully sent to (.*?)";
String val = "Your fax has been successfully sent to 123456789 at 123456789."

现在我可以看到这个匹配,但是如果我调用Pattern.matcher(val).group(1)然后我得到一个超出绑定异常的索引

为什么第1组不是

  

123456789 at 123456789?

由于

2 个答案:

答案 0 :(得分:1)

  

为什么第1组不是[...]

因为您创建了匹配器但实际上并未运行它。

在实际检索组之前,您需要.find()(并检查返回值):

final Matcher matcher = yourPattern.matcher(val);
if (matcher.find())
    // use matcher.group(1)

其他替代方案:.matches().findFirst()

答案 1 :(得分:1)

Your fax has been successfully sent to (.*?)\.

试试这个。抓住小组。看看demo。你没有按照别人的说法使用find你也没有给捕获组一个停止的方法。你需要提供.让它停在{{ 1}}并捕获休息。

http://regex101.com/r/uV3aL0/34