正则表达式的使用Demo1--4个主要功能

package com.regex;

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

public class RegexDemo {

    public static void main(String[] args) {
        /*
         * 1,匹配
         * 使用String类中的matches
         */
        //匹配演示
        functionDemo_1();
        /*
         * 2,切割
         * 使用String类中的split
         */
        //切割演示
        functionDemo_2();
        /*
         * 3替换
         * 使用String类中的replaceAll
         */
        functionDemo_3();
        /*
         * 4获取
         * 其他三个功能内部最终使用的都是Pattern正则表达式对象
         * 现在需要其他功能的时候,字符串String类中没有对应的方法,只能找Pattern
         * Pattren对象的使用原理:
         * 1.将正则表达式字符串编译成正则对象pattern.
         * 2.通过pattern对象获取Matcher对象(匹配器对象)。
         * 3.通过匹配器对象对字符串进行规则的匹配,结果都在匹配器中
         * 4.通过匹配器对象的功能获取结果。
         * Pattern p = Pattern.compile("a*b");
           Matcher m = p.matcher("aaaaab");
           boolean b = m.matches();
         * 
         */
        functionDemo_4();
    }

    private static void functionDemo_4() {
        String str = "da jia zhu yi le,ming tian fang jia le!";
        String regex1 = "\\b[a-zA-Z]{3}\\b";//取出由三个字母组成的单词。
        //1.获取正则表达式对象。
        Pattern p = Pattern.compile(regex1);
        //2.和要操作的字符串关联,获取对应的匹配器对象。
        Matcher m = p.matcher(str);
        System.out.println(str);
        while(m.find())
        {
            System.out.println(m.start()+"..."+m.group()+"..."+m.end());
            System.out.println(str.substring(m.start(), m.end()));
        }
    }

    public static void functionDemo_3() {
        System.out.println("多个替换为一个");
        String str = "wert@@@@@@yuios#####dfgh";
        String regex = "(.)\\1+";
        //在参数列表中,其他参数要使用之前参数中的规则的组,需要使用$组编号
        str =str.replaceAll(regex, "$1");
        System.out.println(str);
        System.out.println("手机号打码");
        String s="13964233168";
        s=s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
        System.out.println(s);
    }

    public static void functionDemo_2() {
        System.out.println("切割演示");
        //String str = "zhangsan       lisi    wangwu" ;
        //String regex = " +";//一个或多个空格
//      String str = "zhangsan.lisi.wangwu";
//      String regex="\\.";//直接用点是任意匹配
        String str = "ert###yuixkkkkcvbn";//连续的叠词作为切割的标准
        //正则规则的复用,想复用先封装
        //用小括号()封装,有编号,从1开始。规则中被()封装的称之为组
        //直接通过编号对组进行调用
        //()\\1在使用已有的第一组内容。原则先有组,才可以使用对应的编号
        /*
         * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 

        1     ((A)(B(C))) 
        2     \A 
        3     (B(C)) 
        4     (C) 
        组0始终表示整个表达式
         */
        String regex="(.)\\1+";//使用已有的第一组规则

        String[] strs = str.split(regex);
        for(String s:strs)
        {
            System.out.println("-"+s+"-");
        }

    }

    public static void functionDemo_1() {
        /*
         * 匹配手机号
         * 要求:第一位为1,第二位358,一共11位
         */
        System.out.println("匹配演示");
        String str = "18600002346";
        //第一位为1,第二位在358中选一个,之后连续9个任意数字
        String regex = "1[358]\\d{9}";
        boolean b= str.matches(regex);
        System.out.println(str+":"+b);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值