正则表达式

正则表达式

1.基本语法:符号即规则

1.1 匹配"单个字符"的元字符

1.2 控制"匹配次数"的元字符

2.爬取

2.1带条件爬取

java 复制代码
   String s = "java自从95年问世以来,经历了很多版本,目前企业中用的最多的是JAva8和Java11,"
            +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久JaVa17也会逐渐登上历史舞台";
//1.定义正则表达式
    //?理解问前面的数据Java
    //=表示在Java后面要紧随的数据
    //但是在获取的时候,只获取前半部分
    //?i忽视大小写
    //需求1. JAva  Java Java JaVa
    String rex1 = "(?i)(java)(?=11|17|8)";
    //需求2. JAva8 Java11 Java17 JaVa17
    String rex2 = "(?i)(java)(11|17|8)";
    String rex3 = "(?i)(java)(?11|17|8)";
    //需求3. java
    String rex4 = "(?i)(java)(?!11|17|8)";
    Pattern p = Pattern.compile(rex4);
    Matcher m = p.matcher(s);
    while(m.find()){
        System.out.println(m.group());
    }
}

2.2贪婪爬取

贪婪爬取:在爬取数据的时候尽可能多的获取数据

非贪婪爬取:在爬取数据的时候尽可能少的获取数据

java 复制代码
public static void main(String[] args) {
    //贪婪爬取:在爬取数据的时候尽可能多的获取数据
    //非贪婪爬取:在爬取数据的时候尽可能少的获取数据
    String s = "abbbbbbbbbbb";
    String rex1 = "ab+";//abbbbbbbbbbb
    String rex2 = "ab+?";//ab
    //1,先创建正则表达式的对象
    Pattern p = Pattern.compile(rex2);
    //2.创建一个文档扫描器,利用m在s中寻找p规则的字符串
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group());
    }
}

3.替换和分割

Java 复制代码
String S = "adfnefnsef小白daafawf小兰";
//1.按照正则表达式的规则进行替换
  String vs = S.replaceAll("[\\w&&[^_]]+", "vs");
  System.out.println(vs);//vs小白vs小兰
  //2.按照正则表达式的规则就行分割
  String[] split = S.split("[\\w&&[^_]]+");
  for (int i = 0; i < split.length; i++) {
      System.out.println(split[i]);//小白  小兰
  }

4.分组

组号的特点: 从1开始,连续不间断

​ 以左括号为基准,最左边的是第一组

4.1捕获性分组

捕获分组:判断一个字符串的开始部分和结尾部分是否一致?可以有多个字符

正则内部使用:\\组好

正则外部使用:$组好

Java 复制代码
 //捕获分组
        //判断一个字符串的开始部分和结尾部分是否一致?可以有多个字符
        String s  = "asd123a";
        String z  = "bbb123bbb";
        String d  = "dsd123dsd";
        String rex1 = "(.)+.+\\1";
        boolean result = s.matches(rex1);
        System.out.println(result);
        // (.)把首字符看成一组
        // \\1把首字符拿出来再次使用
        //  * 作用于\\1 表示后面重复的内容重复0次或多次
        String rex2 = "((.)\\2*).+\\1";
        boolean result2 = z.matches(rex2);
        System.out.println(result2);//true
        String  rex3 = "(.+).+\\1";
        boolean result3 = d.matches(rex3);
        System.out.println(result3);
// 后续还要继续使用本组的数据
        //正则内部使用:\\组好
        //正则外部使用:$组好	
        String rex4 = "我我我要学学学编程";
        String s1 = rex4.replaceAll("(.)\\1+", "$1");
        System.out.println(s1);//我要学编程

4.2非捕获性分组

非捕获分组:分组之后不需要再用本组数据,仅仅是把数据括起来

Java 复制代码
//非捕获分组:分组之后不需要再用本组数据,仅仅是把数据括起来
        //(?:正则) 获取所有
        //(?=正则) 获取前面部分
        //(?!正则) 获取不是置顶内容的前面部分
        //特点不占用组号
        //\\1 报错的原因是(?:)非捕获分组,此时是不占用组号
        String rex5 ="[1-9]{16}(?:\\d|x|X)\\1";
        boolean matches = s.matches(rex5);
    }
相关推荐
Ivanqhz13 分钟前
LLVM IR 转 SMT公式
java·开发语言
一个心烑18 分钟前
奖项届定获取方式
java
小红的布丁18 分钟前
Reactor 模型详解:单 Reactor、主从 Reactor 与 Netty 思想
android·java·开发语言
weixin_7042660525 分钟前
redis 的集群
java·数据库·redis
被摘下的星星26 分钟前
Java的类加载
java·开发语言
真上帝的左手28 分钟前
8. 测试-性能测试-JMeter实战
java·压力测试
cheems952728 分钟前
[SpringMVC] SpringWebMVC常见注解介绍
java·springmvc·注解
me83229 分钟前
【Java】Spring MVC接口执行流程详解:从前端请求到参数封装全解析(前端到底是怎么和后端交互的?)
java·spring·mvc
niucloud-admin31 分钟前
插件开发——upgrade 插件版本升级
java
vortex531 分钟前
Gradle 从入门到实战
java·gradle