正则表达式分组的用法

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

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容