正则表达式练习

正则表达式练习

文章目录

有条件的爬取数据

java 复制代码
package com.example.demo;

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

public class RegexDemo{
    public static void main(String[] args){
        String s = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,"+
                "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
        String string = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和JAva11,"+
                "因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";

//        1.定义正则表达式
//        ?理解为前面的数据Java
//        =表示在Java后面要跟随的数据
//        但是在获取的时候,只获取前半部分
        String regex = "Java(?=8|11|17)";
//        需求1
        String regex1 = "((?i)Java)(?=8|11|17)";
//        需求2
        String regex2 = "((?i)Java)(8|11|17)";
        String regex3 = "((?i)Java)(?:8|11|17)";
//        需求3
        String regex4 = "((?i)Java)(?!8|11|17)";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(string);
        while(m.find()){
            System.out.println(m.group());
        }

    }
}

贪婪爬取和非贪婪爬取

java 复制代码
package com.example.demo;

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

public class RegexDemo{
   /* 只写+和*表示贪婪匹配
    +? 非贪婪匹配
    *? 非贪婪匹配
    贪婪爬取:在爬取数据的时候尽可能的多获取数据
    非贪婪爬取:在爬取数据的时候尽可能的多获取数据
    ab+:
    贪婪爬取:abbbbbbbbbbbbbb
    非贪婪爬取:ab

    Java中默认的就是贪婪爬取
    如果我们在数量词 + * 的后面加上?,那么就是非贪婪爬取
    */
    public static void main(String[] args){
        String s = "Java自从95年问世以来,abbbbbbbbbbbbbbaaaaaaaaaaaa经历了很多版本,目前企业中用的最多的是Java8和Java11,"+
                "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
//        1.定义正则表达式
        String regex = "ab+";
//        String regex = "ab+?";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        while(m.find()){
            System.out.println(m.group());
        }

    }
}

正则表达式在字符串方法中的使用

java 复制代码
package com.example.demo;

public class RegexDemo{
    public static void main(String[] args) {
//        public String  replaceAll(String regex, String newStr)按正则表达式的规则进行替换
//        public String[] split(String regex):按正则表达式的规则切割字符串

       /* 有一段字符串:小诗诗dqwefqwfqwfqw12312小丹丹dqwefqwfqwfqw12312小慧慧
                要求1:把字符串中三个姓名之间的字母替换为vs
                要求2:把字符串中的三个姓名切割出来*/
        String s = "有一段字符串:小诗诗dqwefqwfqwfqw12312小丹丹dqwefqwfqwfqw12312小慧慧";
        //细节:
//        方法在底层跟之前一样也会创建文本解析器的对象
//        然后从头开始去读字符串的内容只要有满足的,那么就用第二个参数去替换
//        String result1 = s.replaceAll("[\\w&&[^_]]+", "vs");
//        System.out.println(result1);

        String[] arr = s.split("[\\w&&[^_]]+");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

分组

分组就是一个小括号

练习

java 复制代码
package com.example.demo;

public class RegexDemo{
    public static void main(String[] args) {
//        \\组号:表示把第x组的内容再拿出来用一次
        String regex1 = "(.).+\\1";
        System.out.println("a123a".matches(regex1));
        System.out.println("b123b".matches(regex1));
        System.out.println("11231".matches(regex1));
        System.out.println("&123&".matches(regex1));
        System.out.println("a123b".matches(regex1));
        System.out.println("-------------------------------");
        String regex2 = "(.+).+\\1";
        System.out.println("abc123abc".matches(regex2));
        System.out.println("b456b".matches(regex2));
        System.out.println("123789123".matches(regex2));
        System.out.println("&!@123&!@".matches(regex2));
        System.out.println("abc123abd".matches(regex2));
        System.out.println("-------------------------------");
//        (.):把首字母看成一组
//        \\2:把首字母拿出来再次使用
//        *:作用于\\2,表示后面重复的内容出现0次或多次
        String regex3 = "((.)\\2*).+\\1";
        System.out.println("aaa123aaa".matches(regex3));
        System.out.println("bbb456bbb".matches(regex3));
        System.out.println("111789111".matches(regex3));
        System.out.println("&&abc&&".matches(regex3));
        System.out.println("aaa123aab".matches(regex3));

    }
}
java 复制代码
package com.example.demo;

public class RegexDemo{
    public static void main(String[] args) {
        String str = "我要学学编编编编程程程程程程程程";
//        $1  表示把正则表达式中第一组的内容,再拿来用
        String result = str.replaceAll("(.)\\1+", "$1");
        System.out.println(result);

    }
}

相关推荐
执笔画流年呀5 分钟前
计算机是如何⼯作的
linux·开发语言·python
weixin_520649877 分钟前
C#闭包知识点详解
开发语言·c#
东北甜妹11 分钟前
Redis Cluster 操作命令
java·开发语言
cwplh11 分钟前
平衡树学习笔记
数据结构·笔记·学习·算法
爱写代码的小朋友12 分钟前
生成式人工智能(AIGC)在中小学生探究式学习中的应用边界与伦理思考
人工智能·学习·aigc
花间相见13 分钟前
【大模型微调与部署01】—— ms-swift-3.12入门:安装、快速上手
开发语言·ios·swift
techdashen21 分钟前
Rust 正式成立 Types Team:类型系统终于有了专属团队
开发语言·后端·rust
jiayong2324 分钟前
第 17 课:任务选择与批量操作
开发语言·前端·javascript·vue.js·学习
消失的旧时光-194330 分钟前
Spring Boot 核心机制之 @Conditional:从原理到实战(一次讲透)
java·spring boot·后端
量子炒饭大师33 分钟前
【C++11】RAII 义体加装指南 ——【包装器 与 异常】C++11中什么是包装器?有哪些包装器?C++常见异常有哪些?(附带完整代码讲解)
开发语言·c++·c++11·异常·包装器