需求:手机号的字符串中获得手机号如"我的手机号是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组的内容,这样就不会把所有内容都删除掉,任何事情都不是一步而成的,因此需要分析步骤。一步一步来,这样问题就会迎刃而解了。