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

01-31 19:36