正则表达式的语法与应用

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@SuppressWarnings("all")
public class 正则表达式 {
    /**
     * 目标:深入学习正则表达式的写法。
     * 预定义字符类
     * 任何字符工
     * \d 数字:[0-9]
     * \D 非数字:[^0-9]
     * \s空白字符:[\t\n\xOB\f\r]
     * \S非空白字符:[^\s]
     * \w单词字符:[a-zA-2 0-9]
     * \W 非单词字符:[^\w]
     * 以上正则匹配只能校验单个字符 如果想校验多个字符,需要加上量词
     *
     *
     *
     * 字符类
     * [abc]a、b 或 c(简单类)
     * [^abc]任何字符,除了 a、b 或 c(否定)[a-zA-Z]a到z或A到Z
     * 两头的字母包括在内(范围)[a-d[m-p]]a到d或m到p:[a-dm-p](并集)
     * [a-z&&[def23]] d、e 或 f(交集)[a-z&&[^bc]]a到z,
     * 除了b和c:[ad-z]
     * [a-z&&[^m-p]] a到z,而非 m到p:[a-lq-z](减去)
     * 并集| 交集&& 除去 -
     *
     *
     * Greedy 数量词
     * x?,一次或一次也没有
     * x*,零次或多次x+x,一次或多次
     * X{n} ,x恰好 n 次
     * x{n,}x,x至少 n 次
     * X{n,m}x,至少 n 次,但是不超过 m 次
     */
    public static void main(String[] args) {
        boolean isPhone = checkPhone();
        boolean isEmail = checkEmail();
        System.out.println("手机号校验结果:" + isPhone);
        System.out.println("邮箱校验结果:" + isEmail);
        splitTheString();
        getData();
    }

    /**
     * 校验手机号码
     *
     * @return
     */
    private static boolean checkPhone() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入手机号:");
        String phone = scanner.nextLine();
        boolean matches = phone.matches("1[3-9]\\d{9}");
        return matches;
    }

    /**
     * 检验邮箱
     *
     * @return
     */
    private static boolean checkEmail() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入邮箱:");
        String email = scanner.nextLine();
        //21344@qq.com
        //2314124@163.com
        //13123134@xxx.com.cn
        boolean matches = email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}");
        return matches;
    }


    /**
     * 正则表达式匹配分割字符串
     */
    private static void splitTheString() {
        //根据,分割字符串
        String str = "王宝强,马蓉,宋喆,乔杉,张柏芝";
        String[] split = str.split(",");
        for (String s : split) {
            System.out.println(s);
        }
        //根据正则表达式分割字符串
        String str2 = "王宝强2314124124qaq马蓉23231578824124qaq宋喆23231578824124www乔杉232315788243239qqaq张柏芝";
        String regex = "\\w+";
        String[] split1 = str2.split(regex);
        for (String s : split1) {
            System.out.println(s);
        }
    }

    /**
     * 爬取内容获取信息
     */
    public static void getData() {
        String rs = "来学习Java一起变牛马,电话020-43422424,或者联系邮箱" +
                "niumajava.cn,电话18762832633,0203232323" +
                "邮箱pxj@niuma.cn,400-100-3233,4001003232";
        //需求:从上面的内容中爬取出 电话号码和邮箱。
        //爬取规则
        String regex = "\\d{0,3}-\\d{7,8}|1[3-9]\\d{9}|\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}" +
                "|400-?\\d{3,8}-?\\d{3,8}";
        //通过规则字符串创建一个匹配规则对象
        Pattern pattern = Pattern.compile(regex);
        //通过匹配规则对象得到一个匹配数据内容的匹配器对象
        Matcher matcher = pattern.matcher(rs);
        //通过匹配器去内容中爬取出信息
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值