Java正则表达式

**

正则表达式

**
给定一个正则表达式和另外一个字符串,可以达到比对的目的
1、给定的字符串完全符合正则表达式的过滤逻辑(成为匹配)
全匹配 matches
部分匹配 lookingAt
2、可以通过正则表达式,从字符串中获取我们想要的特定的部分find
比如:爬虫
读取网络中的数据,获取我们想要的部分

规则:
    . 任意单个字符
    ^ 开始
    $ 结束
    [abc] 匹配单个字符 a或者b或者c
    [a-z] 匹配单个字符 a - z之间的任何一个
    a|b   要么a,要么b
    [^abc] 匹配单个字符,除了a,b,c之外任何单个字符都可以
    \s    空格
    \b    单词边界
    \d    [0-9]
    \w    [a-zA-Z0-9]

    数量词:
        ? 0次或者1次
        + 1-n
        * 0-n
        {n} n次
        {n,} n次以上
        {n,m} n-m次
//创建Pattern对象,设置字符串的规则
        //a*:任意多个a
        //b:只能是一个b
        Pattern p = Pattern.compile("a*b");
        //创建Matcher对象,接收一个字符串,然后进行匹配
        Matcher m = p.matcher("aaaaaab");
        //判断是否能够匹配成功
        boolean b = m.matches();
        System.out.println(b);

        //以上三行代码可以简写为:
        boolean flag = Pattern.matches("正则表达式规则","需要匹配的字符串");
    }
捕获组
    捕获组可以通过从左到右计算其开括号来进行编号
    比如:表达式(A)(B(c))中,存在四种组合
    0   (A)(B(C))
    1   (A)
    2   (B(C))
    3   (C)
 //定义一个匹配规则的对象,将匹配的规则赋值在内
        Pattern p = Pattern.compile("(Z)(A(M))(B(C(D)))");
        //定义一个匹配器对象,然后将字符串内容赋值在内
        //尝试将整个区域与模式进行匹配。
        Matcher m = p.matcher("ZAMBCD");
        //匹配的组的数量统计
        System.out.println(m.groupCount());

        //循环去回去到这些组
        while (m.find()){
            System.out.println(m.group(0));
            System.out.println(m.group(1));
            System.out.println(m.group(2));
            System.out.println(m.group(3));
            System.out.println(m.group(4));
            System.out.println(m.group(5));
            System.out.println(m.group(6));
String类型中已经提供了进行正则表达式的方法
replaceAll()
 public static void main(String[] args) {
        String s = "13233335879";
        String s1 = s.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3");
        System.out.println(s1);
        //$1:132
        //$2:3333
        //$3:35879

        //将多个重复的元素替换掉
        String str = "我我我我喜喜喜喜喜欢欢你你你你";
        //$1:取第一个括号中的元素   (.)
        //\1只留一个
        String s2 = str.replaceAll("(.)\\1+","$1");
        System.out.println(s2);
        //  \1在正则表达式中,从左往右数,第一个左边括号对应的括号内的内容
        //  以此类推,\2表示第二个内容 \0表示整个表达式

    }
boolean matches(String regex):告诉这个字符串是要进行一个正则表达式的匹配
public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     System.out.println("请输入你的手机号:");
     String phone = scanner.next();
     //创建一个匹配器的解释器,将手机号的正则表达式放在里面
     Pattern p = Pattern.compile("1[3-9]\\d{9}");
     //准备一个boolean类型的变量,用来接收你比对后的结果
     Matcher m = p.matcher(phone);
     boolean b = m.matches();
     if(b){
         System.out.println("你的手机号是:" + phone);
     }else{
         System.out.println("你输入的手机号是错误的,请重新输入");
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值