Day05_06目标:正则表达式

目标:正则表达式

正则表达式的作用?

正则表达式是一些特殊的格式化字符,可以用于做信息校验。
可以用于校验邮箱,手机号码,电话等信息是否合法,是否满足规范。
可以用于做网络爬虫,可以从一大推的信息中爬出我们想要的数据。

public class Demo01 {
     
    public static void main(String[] args) {
     
        // 1.正则表达式的入门使用。
        String regex = "[abc]";
        System.out.println("a".matches(regex)); // true
        System.out.println("d".matches(regex)); // false

        String regex1 = "[^abc]"; // 不能出现abc.
        System.out.println("a".matches(regex1)); // false
        System.out.println("d".matches(regex1)); // true

        String regex2 = "[a-zA-Z]"; // 只能是英文字母
        System.out.println("Z".matches(regex2)); // true
        System.out.println("2".matches(regex2)); // false

       /** 预定义字符类
        . 任何字符
        \d 数字:[0-9]
        \D 非数字: [^0-9]
        \s 空白字符:[ \t\n\x0B\f\r]
        \S 非空白字符:[^\s]
        \w 单词字符:[a-zA-Z_0-9]
        \W 非单词字符:[^\w]
        */
        System.out.println("2".matches("\\d"));
        System.out.println("徐".matches("\\w"));
        System.out.println("A".matches("\\w"));

        /**
         Greedy 数量词
         X? X,一次或一次也没有
         X* X,零次或多次
         X+ X,一次或多次
         X{n} X,恰好 n 次
         X{n,} X,至少 n 次
         X{n,m} X,至少 n 次,但是不超过 m 次
         */

        // 校验密码:至少6个字母数字下划线。
//        Scanner sc = new Scanner(System.in);
//        System.out.print("请输入密码:");
//        String pwd = sc.nextLine();
//        if(pwd.matches("\\w{6,}")){
     
//            System.out.println("密码合法!");
//        }else{
     
//            System.err.println("密码格式不正确,至少6个字母数字下划线!");
//        }

//        Scanner sc = new Scanner(System.in);
//        System.out.print("请输入手机号码:");
//        String phone = sc.nextLine();
//        if(phone.matches("1[3-9]\\d{9}")){
     
//            System.out.println("手机合法!");
//        }else{
     
//            System.err.println("手机格式不正确!");
//        }


        Scanner sc = new Scanner(System.in);
        System.out.print("请输入邮箱:");
        String email = sc.nextLine();
        // [email protected]
        // [email protected]
        // [email protected]
        // [email protected]
        if(email.matches("\\w+@\\w{1,20}(\\.\\w{1,10}){1,2}")){
     
            System.out.println("email合法!");
        }else{
     
            System.err.println("email格式不正确!");
        }
    }
}

使用正则表达式来爬取一段文字中的电话号码和邮箱

public class Demo02 {
     
    public static void main(String[] args) {
     
        String content = "地址三:北京市顺义区京顺路99号黑马程序员(教学楼A栋)" +
                "电话:400-618-4000,手机号码18665616520 , " +
                "座机 北京市02022209358顺义区京顺027-28309358,或者027-110" +
                " 北京市顺义区京顺邮箱是[email protected]";

        // 1.定义爬取规则。
        String regex = "(\\w+@\\w{1,20}(\\.\\w{1,10}){1,2})|(1[3-9]\\d{9})|(4\\d{2,3}-?\\d{2,6}-?\\d{2,10})|(0\\d{2,6}-?\\d{3,12})";
        // 2.需要把正则表达式进行编译成匹配规则对象。
        Pattern pattern = Pattern.compile(regex);
        // 3.开始通过匹配规则对象pattern去定义内容的匹配器对象
        Matcher matcher = pattern.matcher(content);
        // 4.拿着匹配器开始去内容中爬取想要的信息。
        while(matcher.find()){
      // 寻找
            System.out.println(matcher.group()); // 取出来
        }
    }
}

你可能感兴趣的:(Java,正则表达式)