正则表达式分组的用法

最近需要解决一个问题,就是一段符合某种格式的文本中有一些信息需要提取出来,比如下面这段文字:

My name is John, and my age is 26.

我需要提取这里的John26作为该条目的nameage。这种需求应该是比较常见的,比如你要搜集一条日志中的一些信息,或者一条短信中的验证码部分。

下面来看如何使用Java的正则表达式解决这个问题:

String source = "My name is John, and my age is 26.";
Pattern pattern = Pattern.compile("My name is (\\w+), and my age is (\\d+)\\.");
Matcher matcher = pattern.matcher(source);
if(matcher.find()){
    System.out.println(matcher.group(0)); // output:My name is John, and my age is 26.
    System.out.println(matcher.group(1)); // output:John
    System.out.println(matcher.group(2)); // output:26
}else{
    System.out.println("No match");
}

这里使用括号将需要分组的部分包括起来,然后通过Matcher的group()方法来引用匹配的部分。

注意:

  1. group(0)永远匹配整个表达式,第一个括号的匹配用group(1)表示。
  2. 这里的pattern,简单起见没有考虑名字中包含空格的情况。

这里附一个在线验证正则的网站:http://regexr.com/

你可能感兴趣的:(正则表达式分组的用法)