最近需要解決一個問題爽锥,就是一段符合某種格式的文本中有一些信息需要提取出來,比如下面這段文字:
My name is John, and my age is 26.
我需要提取這里的John
和26
作為該條目的name
和age
氯夷。這種需求應(yīng)該是比較常見的,比如你要搜集一條日志中的一些信息腮考,或者一條短信中的驗證碼部分。
下面來看如何使用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,簡單起見沒有考慮名字中包含空格的情況暴凑。
這里附一個在線驗證正則的網(wǎng)站:http://regexr.com/