最近需要解决一个问题,就是一段符合某种格式的文本中有一些信息需要提取出来,比如下面这段文字:
My name is John, and my age is 26.
我需要提取这里的John
和26
作为该条目的name
和age
。这种需求应该是比较常见的,比如你要搜集一条日志中的一些信息,或者一条短信中的验证码部分。
下面来看如何使用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()方法来引用匹配的部分。
注意:
- group(0)永远匹配整个表达式,第一个括号的匹配用group(1)表示。
- 这里的pattern,简单起见没有考虑名字中包含空格的情况。
这里附一个在线验证正则的网站:http://regexr.com/