find() + start() + end()
  find() 方法用于在文本中查找出现的正则表达式,文本是创建Matcher时,通过 Pattern.matcher(text) 方法传入的。如果在文本中多次匹配,find() 方法返回第一个,之后每次调用 find() 都会返回下一个。
  start() 和 end() 返回每次匹配的字串在整个文本中的开始和结束位置。实际上, end() 返回的是字符串末尾的后一位,这样,可以在把 start() 和 end() 的返回值直接用在String.substring() 里。
  String text    =
  "This is the text which is to be searched " +
  "for occurrences of the word 'is'.";
  String patternString = "is";
  Pattern pattern = Pattern.compile(patternString);
  Matcher matcher = pattern.matcher(text);
  int count = 0;
  while(matcher.find()) {
  count++;
  System.out.println("found: " + count + " : "  + matcher.start() + " - " + matcher.end());
  }
  这个例子在文本中找到模式 “is” 4次,输出如下:
  found: 1 : 2 - 4
  found: 2 : 5 - 7
  found: 3 : 23 - 25
  found: 4 : 70 - 72
  reset()
  reset() 方法会重置Matcher内部的匹配状态。当find() 方法开始匹配时,Matcher 内部会记录截至当前查找的距离。调用 reset() 会重新从文本开头查找。
  也可以调用 reset(CharSequence) 方法. 这个方法重置Matcher,同时把一个新的字符串作为参数传入,用于代替创建 Matcher 的原始字符串。
  group()
  假设想在一个文本中查找URL链接,并且想把找到的链接提取出来。当然可以通过 start()和 end()方法完成。但是用group()方法更容易些。
  分组在正则表达式中用括号表示,例如:
  (John)
  此正则表达式匹配John, 括号不属于要匹配的文本。括号定义了一个分组。当正则表达式匹配到文本后,可以访问分组内的部分。
  使用group(int groupNo) 方法访问一个分组。一个正则表达式可以有多个分组。每个分组由一对括号标记。想要访问正则表达式中某分组匹配的文本,可以把分组编号传入 group(int groupNo)方法。
  group(0) 表示整个正则表达式,要获得一个有括号标记的分组,分组编号应该从1开始计算。
  String text    =  "John writes about this, and John writes about that," +
  " and John writes about everything. "  ;
  String patternString1 = "(John)";
  Pattern pattern = Pattern.compile(patternString1);
  Matcher matcher = pattern.matcher(text);
  while(matcher.find()) {
  System.out.println("found: " + matcher.group(1));
  }
  以上代码在文本中搜索单词John.从每个匹配文本中,提取分组1,是由括号标记的部分。输出如下
  found: John
  found: John
  found: John