首页 > 其他分享 >正则表达式

正则表达式

时间:2023-03-23 21:12:07浏览次数:32  
标签:regex Java String 正则表达式 System println out

作用:校验字符串是否满足规则

 

 

 

 

转义字符  \  改变后面那个字符原本的含义

//请编写正则表达式验证身份证号码是否满足要求。
        //简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x

        String regex="[1-9]\\d{16}(\\d|X|x)";
        System.out.println("15040119810705387x".matches(regex));  //true
        System.out.println("130133197204039024".matches(regex));  //true

 

在一段文本中查找满足要求的内容

//有如下文本,请按照要求爬取数据。
        //Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
        //因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
        //要求:找出里面所有的Javaxx
        String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";

        //获取正则表达式对象
        Pattern p=Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器对象
        //拿着matcher去读取str,找到符合p规则的子串
        Matcher matcher = p.matcher(str);
        //利用循环获取
        while (matcher.find()){
            System.out.println(matcher.group());  //输出:Java  Java8  Java11 Java17 Java17
        }

带条件爬取

//带条件爬取
        String regex1="((?i)Java)(?=8|11|17)"; // 输出4个Java
        // 解释 (?i)表示忽略大小写 ? 理解为前面的数据 = 表示在Java后面要跟随的数据  但是获取时候只获取前半部分


        String regex2="((?i)Java)(?:8|11|17)";  //输出Java8  Java11  Java17  Java17
        // : 表示获取的时候获取整体

        String regex3="((?i)Java)(?!8|11|17)";  //输出Java
        // ! 表示查找符合去除后面的数字的Java

贪婪爬取和非贪婪爬取

String str1="abbbbbbbbbbbbbbbbbbbbbbcccccccccccccc";
        //贪婪爬取 尽可能多的获取数据
        String regex="ab+";  //abbbbbbbbbbbbbbbbbbbbbb
        //非贪婪爬取 尽可能少获取数据
        String regex5="ab+?";  //ab

方法

 

 

//替换
        String str="张三afvde213李四gnrji31王五";
        String regex="[\\w&&[^_]]+";
        String vs = str.replaceAll(regex, "VS");
        System.out.println(vs);
        //切割
        String[] arr = str.split(regex);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);  //张三 李四 王五
        }

 

分组

分组就是一个小括号

每组是有组号的,也就是序号。

规则1:从1开始,连续不间断。

规则2:以左括号为基准,最左边的是第一组,其次是第二组,以此类推

捕获分组

  就是把这一组中的数据捕获出来,再用一次

  正则内部使用:\\组号

//需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符
        // 举例: a123a b456b 17891 &abc&
        String regex1="(.).+\\1";
        System.out.println("a123a".matches(regex1));  //true
        System.out.println("a123b".matches(regex1));  //false

        //需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
        // 举例: abc123abc b456b 123789123 &!@abc&!@
        String regex2="(.+).+\\1";
        System.out.println("abc123abc".matches(regex2));  //true
        System.out.println("123789122".matches(regex2));  //false

        //需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
        //举例: aaa123aaa bbb456bbb 111789111 &&abc&&
        String regex3="((.)\\2*).+\\1";
        //(.):把首字母看做一组
        // \\2:把首字母拿出来再次使用 2是因为首字母是第二组
        //  *:作用于\\2,表示后面重复的内容出现0次或多次
        System.out.println("aaa123aaa".matches(regex3));  //true
        System.out.println("bbb456bbc".matches(regex3));  //false

正则外部使用:$组号

//将字符申:我要学学编编编编程程程程程程替换为:我要学编程
        String str1="我要学学编编编编程程程程程程";
        String regex="(.)\\1+";
        //(.)表示把重复内容的第一个字符看做一组
        // \\1表示第一个字符再次出现
        //+ 至少一次
        String result = str1.replaceAll(regex, "$1");
        //$1 表示把正则表达式中第一组的内容,再拿出来用
        System.out.println(result);   //我要学编程

非捕获分组

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

 

 注:(?:)(?=)(?!)都是非捕获分组

String str="41080119930228457×";
        
        //非捕获分组特点不占用组号
        String regex="[1-9]\\d{16}(?:\\d|X|x)"; 
        String regex1="[1-9]\\d{16}(?:\\d|X|x)\\1"; //  \\1会报错 (?:)是非捕获分组,此时是不占用组号的,\\1找不到分组
        System.out.println(str.matches(regex1));

 

标签:regex,Java,String,正则表达式,System,println,out
From: https://www.cnblogs.com/futureyearn/p/17249449.html

相关文章

  • 常用数字与字母的正则表达式 比如 前10个数字后面和一个数字或者字母
    常用数字与字母的正则表达式比如前10个数字后面和一个数字或者字母原文链接:https://www.cnblogs.com/xuqiang7/p/11082729.html^\d{10}[A-Za-z0-9]{1}$或者^\d{10}......
  • 学习记录-JAVA正则表达式
    正则表达式java匹配方法s.matches("JAVA");s.equals("JAVA");来询问该字符串是否匹配表达式正则表达式语法整行字符加上/表示为正则表达式/123/以下所有均省略//......
  • JS常用各种正则表达式(汇总)
    JS常用各种正则表达式(汇总)原文链接:https://www.cnblogs.com/mxyr/p/10039393.html匹配URL这个url的正则表达式判断的JavaScript!比较全面的。它验证的情况包括IP,域名(dom......
  • JAVA正则表达式
    JAVA正则表达式参考Java正则表达式|菜鸟教程(runoob.com)1.正则表达式是什么正则表达式(RegularExpression)是一种文本模式,包括普通字符和特殊字符。正则表达式......
  • 正则表达式
    正则表达式\((regular\expression)\)正则表达式是一个字符串,用来描述匹配一个字符串集合的模式,可以使用正则表达式来匹配、替换和拆分字符串匹配字符串我们先来看......
  • 正则表达式
    正则表达式:用特殊符号表达,符号属于通用符号基本正则:优点:兼容性强 缺点:繁琐处理单位是一个符号^//匹配行首$//匹配行尾^$......
  • 正则表达式matcher.group用法
    原来,group是针对()来说的,group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西。 最近学习正则表达式,发现Java中的一些术语与其他地方描述的有......
  • 正则表达式注意事项
    问题正则表达式一段时间不常用就经常忘掉,这里记录一下容易忘掉的知识点。?=和?:和?!和?<=和?<!要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念://前瞻:e......
  • Python中使用正则表达式以及正则表达式匹配规则
    ​1导库importre2使用模板re_pattern=re.compile(pattern,flags=0)result=re.findall(re_pattern,string)3说明参数描述pattern匹配的正则......
  • 正则表达式
    [0,1]^[01]$[3,100]^[3-9]$|^(?:[1-9]\\d|100)$[1,1000]^([1-9][0-9]{0,2}|1000)$[1,10000]^([1-9][0-9]{0,3}|10000)$[0,99]^([0-9][0-9]{0,1})$[0,......