public class RegexDemo3 {
    public static void main(String[] args) {

        String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";
        //在其中查找javaxx

        //Pattren:表示正则表达式
        //Macher:表示匹配器

        //获取正则表达式对象
        Pattern p1 = Pattern.compile("java\\d{0,2}");
        //获取匹配器对象
        //m1:表示匹配器对象
        //str:表示要匹配的字符串
        //p1:表示规则
        //m1要在str字符串找符合p1规则的字符串
        Matcher m1=p1.matcher(str);

        //find():查找符合规则的字符串,找到返回true,找不到返回false(在底层记录的是起始索引和结束索引+1)
        boolean flag=m1.find();
        System.out.println(flag);//true

        //group():获取符合规则的字符串
        //substring(起始索引,结束索引);包头不包尾
        //(0-4)不包含4
        String s1=m1.group();
        System.out.println(s1);//java

        //第二次find()的时候会继续往后面查找,group()会根据find()的起始索引和结束索引继续往后获取字符串
        boolean flag2=m1.find();
        System.out.println(flag2);//true
        String s2=m1.group();
        System.out.println(s2);//java17
    }
}
---------------------------------
public class RegexDemo4 {
    public static void main(String[] args) {
        String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";
        Pattern p = Pattern.compile("java\\d{0,2}");
        Matcher m=p.matcher(str);
        //循环不断读取直到末尾返回false
        while(m.find()){
            String s=m.group();
            System.out.println(s);
        }

        String str1="找香香学习java"+
                "电话:13112341234"+
                "邮箱:xiangxiang@qq.com"+
                "电话:13112341235"+
                "邮箱:haha@qq.com"+
                "座机电话:010-12345678";
        Pattern p1=Pattern.compile("[1-9][3-9]\\d{9}");
        Pattern p2 = Pattern.compile("\\w+@[\\w&&[^-]]{2,4}(\\.[a-zA-Z]{2,3}){1,3}");
        Pattern p3 = Pattern.compile("0\\d{2,3}-?\\d{4,7}");
        Matcher m1=p1.matcher(str1);
        Matcher m2 = p2.matcher(str1);
        Matcher m3 = p3.matcher(str1);
        System.out.println("学习java");
        //String s=m.group();
        //System.out.println(s);
        System.out.println("电话:");
        while(m1.find()){
            String s1=m1.group();
            System.out.println(s1);
        }
        System.out.println("邮箱:");
        while(m2.find()){
            String s2=m2.group();
            System.out.println(s2);
        }
        System.out.println("座机电话:");
        while(m3.find()){
            String s3=m3.group();
            System.out.println(s3);
        }
    }
}
----------------------------------------------------------
public class RegexDemo5 {
    public static void main(String[] args) {
        String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";

        //1.爬取版本号为8,11,17的java文字,但只要java,但不要版本号
        //(1.)定义正则表达式
        String regex1="java(?=8|11|17)";//?表示前面的java,=表示后面要跟随的8,11,17,要符合java8,11,17但最后读取的还是java
        Pattern p1 = Pattern.compile(regex1);
        Matcher m1 = p1.matcher(str);
        while(m1.find()){
            String s = m1.group();
            System.out.println(s);
        }
        //2.爬取版本号为8,11,17的java文字,java8,java11,java17
        String regex2="java(8|11|17)";//或者"java(?:8|11|17)"//?表示前面的java,:表示后面要跟随的8,11,17,要符合java8,11,17但最后读取是全部
        Pattern p2=Pattern.compile(regex2);
        Matcher m2 = p2.matcher(str);
        while(m2.find()){
            String s=m2.group();
            System.out.println(s);
        }
        //3.爬取除了版本号为8,11,17的java文字
        String regex3="java(?!8|11|17)";
        Pattern p3=Pattern.compile(regex3);
        Matcher m3 = p3.matcher(str);
        while(m3.find()){
            String s=m3.group();
            System.out.println(s);
        }
    }
}
-----------------------------------------
public class RegexDemo6 {
    public static void main(String[] args) {
        String str="java是世界上最好的语言,abbbbbbbbbbbbaaaaaaaaaaaa,java17,java8,java11啊hi发哦富婆啊覅";

        //只写+和*表示贪婪爬取
        //+?和*?表示非贪婪爬取

        //java默认的是贪婪爬取
        //如果在数量词后面加上?表示非贪婪爬取

        //按ab+的形式爬取ab,b尽可能多的爬取
        Pattern p1 = Pattern.compile("ab+");
        Matcher m1 = p1.matcher(str);
        while (m1.find()) {
            System.out.println(m1.group());//abbbbbbbbbbbb
        }
        System.out.println("=====================");
        //按ab+的形式爬取ab,b尽可能少的爬取
        Pattern p2 = Pattern.compile("ab+?");
        Matcher m2 = p2.matcher(str);
        while (m2.find()) {
            System.out.println(m2.group());//ab
        }
    }
}
--------------------------------------------------------
public class RegexDemo7 {
    public static void main(String[] args) {
        //public static replaceAll(String regex,String replacement)//按正则表达式的规则替换
        //public String[] split(String regex)//按正则表达式的规则分割

        String str="哈哈asddaafsadsfdsfafsad131香香afdasfasdfsadfsad231正正";

        //1.把三个名字之间替换成vs
        //细节:
        //方法在底层跟之前一样也会创建文本解析器(matcher)的对象
        //然后从头开始解析,把符合规则的部分替换成新的内容
        String s1 = str.replaceAll("\\w{1,25}", "vs");
        System.out.println(s1);//哈哈vs香香vs正正
        //2.把三个名字分割出来(取除分割符以外的内容)
        String[] sp1=str.split("[\\W&&[^\\s]]{2}");
        for (int i = 0; i < sp1.length; i++) {
            System.out.println(sp1[i]);
        }//asddaafsadsfdsfafsad131  afdasfasdfsadfsad231

        String[] sp2=str.split("\\w{1,25}");
        for (int i = 0; i < sp2.length; i++) {
            System.out.println(sp2[i]);
        }//哈哈  香香  正正
    }
}