需求:手機號的字符串中獲得手機號如"我的手機號是18988888888,曾經用過15633333333,還用過1897777777";
package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * 需求: * 從包含手機號的字符串中獲得手機號如"我的手機號是18988888888,曾經用過15633333333,還用過1897777777"; * */ public class GetPhoneNum { public static void main(String[] args) { demo1(); demo2(); } public static void demo2() { String s="我的手機號是18988888888,曾經用過15633333333,還用過18977777777"; String regex ="1[85]\\d{9}"; Pattern p =Pattern.compile(regex);//發現matches()方法不行,則在Matcher中找其他方法,發現了find()方法,去找符合會澤的字符串,找到返回true,好不到返回false Matcher m=p.matcher(s); // boolean b = m.find(); // System.out.println(b);//返回維true說明找到了,再次去Matcher中找方法,group()方法,返回以前操作所匹配的輸入字符串,也就是說返回匹配的內容 // String s1 =m.group(); // System.out.println(s1);//發現只會輸出一個手機號,因此要循環 System.out.println("采用find()和group()方法獲得手機號"); while(m.find()) System.out.println(m.group()); } public static void demo1() { String s="我的手機號是18988888888,曾經用過15633333333,還用過1897777777"; String regex ="1[85]\\d{9}"; Pattern p =Pattern.compile(regex);//獲取正則表達式 Matcher m=p.matcher(s);//獲取匹配器 boolean b=m.matches();//看匹配器是否與正則表達式比配 System.out.println("用s匹配regex的結果:"); System.out.println(b); //以上三步其實相當於 System.out.println("s".matches(regex)); System.out.println("s".matches(regex)); } //結果為false 正則為中文匹配不上。 }
在分組中用$n來獲得第n組的內容,這樣就不會把所有內容都刪除掉,任何事情都不是一步而成的,因此需要分析步驟。一步一步來,這樣問題就會迎刃而解了。