正则表达式(Java)(韩顺平笔记)

正则表达式(韩顺平讲解) 正则表达式韩顺平 阅读详情

正则表达式(Java)

底层实现

package com.hspedu.RegExp;

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

public class RegExp00 {
    public static void main(String[] args) {
        String content = "1998年12月8日,第二代Java平台的企业版J2EE发布。" +
                "1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:" +
                "J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及" +
                "有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标" +
                "准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台" +
                "的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展" +
                "过程中最重要的一个里程碑,标志着Java的应用开始普及。";
//        String regStr = "\\d\\d\\d\\d";
        String regStr = "(\\d\\d)(\\d\\d)";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        /**
         * matcher.find() 完成的任务
         * 1. 根据指定的规则,定位满足规则的子字符串(比如1998)
         * 2. 找到后,将子字符串的开始的索引记录到matcher对象的属性int[] groups;
         *    group[0] = 0, 把该子字符串的结束的索引+1的值记录到 groups[1] = 4;
         * 3. 同时记录 oldLast 的值为 子字符串的结束的 索引+1的值即4 即下次执行find时 就从4开始匹配
         *
         * matcher.find() 完成的任务
         * 1. 根据指定的规则,定位满足规则的子字符串(比如(19)(98))
         * 2. 找到后,将子字符串的开始的索引记录到matcher对象的属性int[] groups;
         *    2.1 group[0] = 0, 把该子字符串的结束的索引+1的值记录到 groups[1] = 4;
         *    2.2 记录1组的()匹配到的字符串 groups[2] = 0 groups[3] = 2
         *    2.3 记录2组的()匹配到的字符串 groups[4] = 2 groups[5] = 4
         * 3. 同时记录 oldLast 的值为 子字符串的结束的 索引+1的值即4 即下次执行find时 就从4开始匹配
         */
        while (matcher.find()) {
            System.out.println("找到:" + matcher.group(0));
            System.out.println("找到:" + matcher.group(1));//表示匹配到的子字符串的第一组子串
            System.out.println("找到:" + matcher.group(2));//表示匹配到的子字符串的第二组子串
            //分组不能越界
        }
    }
}

matcher.find

public boolean find() {
        int nextSearchIndex = last;
        if (nextSearchIndex == first)
            nextSearchIndex++;

        // If next search starts before region, start it at region
        if (nextSearchIndex < from)
            nextSearchIndex = from;

        // If next search starts beyond region then it fails
        if (nextSearchIndex > to) {
            for (int i = 0; i < groups.length; i++)
                groups[i] = -1;
            return false;
        }
        return search(nextSearchIndex);
    }

matcher.group

public String group(int group) {
        if (first < 0)
            throw new IllegalStateException("No match found");
        if (group < 0 || group > groupCount())
            throw new IndexOutOfBoundsException("No group " + group);
        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
            return null;
        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
    }

基础用法

package com.hspedu.RegExp;

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

public class RegExp01 {
    public static void main(String[] args) {
        String content = "a_bchHKKay66 66sABc_jdj*@fDH \n  Y298HU 寒冷 韩顺平 han";
//        String regStr = "[a-z]";// 查找小写字母a-z任意一个字符
//        String regStr = "[A-Z]";// 查找大写字母A-Z任意一个字符
//        String regStr = "abc";// 查找abc字符串 (默认区分大小写)
//        String regStr = "(?i)abc";// 查找abc字符串 (不区分大小写)
//        String regStr = "[0-9]";// 查找0-9任意一个字符
//        String regStr = "[^0-9]";// 查找不在0-9任意一个字符
//        String regStr = "[^a-z]";// 查找不在a-z任意一个字符
//        String regStr = "[abcd]";// 查找abcd任意一个字符
//        String regStr = "[^abcd]";// 查找不是abcd任意一个字符
//        String regStr = "\\D";// 查找不是数字0-9字符
//        String regStr = "\\w";// 查找字母,数字,下划线  @不属于范围
//        String regStr = "\\W";// 上式取反 相当于[^0-9a-zA-Z_]
//        String regStr = "\\s";// 查找空白字符
//        String regStr = "\\S";// 查找非空白字符
//        String regStr = ".";// 查找非 \n 以外所有字符 查找.需要用 \\.

        String regStr = "寒|韩|han";// 选择匹配符


        //Pattern.CASE_INSENSITIVE 表示匹配不区分大小写
        Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);// 创建对象
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
        }
    }
}   

正则限定符

符号含义示例说明匹配输入
*指定字符重复0次或n次(无要求)(abc)*仅包含任意个abc字符串,相当于\w*abc abcabcabc
+指定字符重复1次或n次(至少1次)m+(abc)*以至少1个m开头,后接任意个abc的字符串m mabc mabcabc
?指定字符重复0次或1次(最多1次)m+abc?以至少1个m开头,后接ab或abc的字符串mab mabc mmmab mmabc
{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串abc dbc adc
{n,}指定至少n个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串aab dbc aaabdc
{n,m}指定至少n个但不多于m个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串abc abcd aaaaa bcdab
package com.hspedu.RegExp;

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

public class RegExp02 {
    public static void main(String[] args) {
        String content = "11111111aaaaaaahello";

//        String regStr = "a{3}";// 匹配 aaa
//        String regStr = "1{4}";// 匹配 1111
//        String regStr = "\\d{2}";// 匹配 两位任意数字字符

        //Java默认匹配多的(贪婪匹配)
//        String regStr = "a{3,4}";// 匹配 aaa 或 aaaa(优先)
//        String regStr = "1{4,5}";// 匹配 1111 或 11111(优先)
//        String regStr = "\\d{2,5}";// 匹配 2位数 或 3,4,5 实际 sout (找到 11111 (换行) 找到 111)

//        String regStr = "1+";// 匹配 1个1 或 多个1
//        String regStr = "\\d+";// 匹配 1个数字 或 多个数字

//        String regStr = "1*"; // 匹配0个1或者多个1

        String regStr = "a1?";// 匹配 a 或 a1

        Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

正则定位符

符号含义示例说明匹配输入
^指定起始字符1+[a-z]*以至少一个数字开头,后接任意个小写字母的字符串123 6aa 555edf
$指定结束字符2\\-[a-z]+$以一个数字开头后接连字符“-”,并以至少1个小写字母结尾的字符串1-a
\\b匹配目标字符串的边界han\\b这里说的字符串边界指的是子串间有空格,或者是目标字符串的结束位置hanshunping sphan nnhan
\\B匹配目标字符串的非边界han\\B和\b的含义相反hanshuping sphan nnhan
package com.hspedu.RegExp;

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

public class RegExp03 {
    public static void main(String[] args) {
//        String content = "123anj-556abc-945BGh";
//        String content = "123-ljj";
        String content = "hanshunping sphan nnhan";

//        String regStr = "^[0-9]+[a-z]*";// 找到123anj
//        String regStr = "^[0-9]+\\-[a-z]+$";// 找到123-ljj
//        String regStr = "^[0-9]+\\-[a-z]+$";// 找到123-ljj

//        String regStr = "han\\b";// 找到 han (sphan) 找到 han (nnhan)
        String regStr = "han\\B";// 找到 han (hanshunping)


        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

捕获分组

常用分组构造形式说明
(pattern)非命名捕获。捕获匹配的子字符串。编号为0的第一个捕获是由整个正则表达式模式匹配的文本,其他捕获结果则根据左括号的顺序从1开始自动编号。
(?'name’pattern)命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用尖括号代替单引号。
package com.hspedu.RegExp;

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

public class RegExp04 {
    public static void main(String[] args) {
        String content = "hanshunping s7789 nn1189han";

//        String regStr = "(\\d\\d)(\\d\\d)";//匹配四个数组的字符串(7789)(1189)

//        String regStr = "(\\d\\d)(\\d)(\\d)";
        /**
         * 找到 7789
         * 第一个分组 77
         * 第二个分组 8
         * 第三个分组 9
         * 找到 1189
         * 第一个分组 11
         * 第二个分组 8
         * 第三个分组 9
         */

        String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)";
        /**
         * 找到 7789
         * 第一个分组[编号] 77
         * 第二个分组[编号] 89
         * 找到 1189
         * 第一个分组[编号] 11
         * 第二个分组[编号] 89
         */

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
//            System.out.println("第一个分组 " + matcher.group(1));
            System.out.println("第一个分组[编号] " + matcher.group("g1"));
//            System.out.println("第二个分组 " + matcher.group(2));
            System.out.println("第二个分组[编号] " + matcher.group("g2"));
//            System.out.println("第三个分组 " + matcher.group(3));
        }
    }
}

非捕获分组

常用分组构造形式说明
(?:pattern)匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符(|)组合模式部件的情况很有用。
(?=pattern)它是一个非捕获匹配。
(?!pattern)该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。
package com.hspedu.RegExp;

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

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

        String content = "hello韩顺平教育 Jack韩顺平老师 韩顺平同学hello";
        //找到 韩顺平教育 、 韩顺平老师 、 韩顺平同学
//        String regStr = "韩顺平(?:教育|老师|同学)";//不能group(1)

        //找到 韩顺平教育中的韩顺平 韩顺平老师中的韩顺平
//        String regStr = "韩顺平(?=教育|老师)";

        //找到 不是韩顺平教育中的韩顺平 不是韩顺平老师中的韩顺平
        String regStr = "韩顺平(?!教育|老师)";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            //非捕获分组 不能使用group(1)
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

非贪婪匹配

package com.hspedu.RegExp;

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

public class RegExp06 {
    public static void main(String[] args) {
        
        String content = "hello1111111";
        String regStr = "\\d+?";
        
        /**
         * 找到 1
         * 找到 1
         * 找到 1
         * 找到 1
         * 找到 1
         * 找到 1
         * 找到 1
         */
        
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            //非捕获分组 不能使用group(1)
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

应用实例

package com.hspedu.RegExp;

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

public class RegExp07 {
    public static void main(String[] args) {
        //汉字
//        String content = "韩顺平教育";
//        String regStr = "^[\u0391-\uffe5]+$";//true

        //1-9开头的一个六位数
//        String content = "112344";
//        String regStr = "^[1-9]\\d{5}$";//true

        //1-9开头的一个(5-10位数)
//        String content = "12389";
//        String regStr = "^[1-9]\\d{4,9}$";//true

        //以11、13、18开头的11位数
        String content = "11588889999";
        String regStr = "^1[1|3|8]\\d{9}$";//true

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        if (matcher.find()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

    }
}

验证复杂URL

package com.hspedu.RegExp;

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

public class RegExp09 {
    public static void main(String[] args) {
        String content = "https://www.bilibili.com/video/BV1fh411y7R8?;
        /** ((http|https)://)开始部分
         *  ([\w-]+\.)+[\w-]+ 匹配 www.bilibili.com
         *  (\/[\w-?=&/%.#]*)? 匹配 /video/BV1fh411y7R8?p=894&vd_source=a8223634aa8a190c7233a2dc3f8a15e3
         *  []里面的元素相当于一个集合
         *  如果查找 "(去掉http)edu.metastudy.vip/mt/official/pc/mxmt-ksjhdj"
         *  regStr = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$";
         */

        String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        if (matcher.find()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}

Pattern类matches方法

package com.hspedu.RegExp;

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

public class RegExp10 {
    public static void main(String[] args) {
        String content = "10https://www.bilibili.com/video/BV1fh411y7R8?p=894&vd_source=";

        String regStr = "((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.#]*)?$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        //find匹配必须加^$定位符
        if (matcher.find()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

        //整体匹配
        System.out.println(Pattern.matches(regStr, content));

        /**
         * true
         * false
         */
    }
}

Pattern类中的源码:

public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

matcher方法

package com.hspedu.RegExp;

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

public class RegExp11 {
    public static void main(String[] args) {
        String content = "hello edu jack hspedutom hello smith hello";
//        String regStr = "hello";
        String regStr = "hello edu jack tom hello smith hello";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("================");
            System.out.println(matcher.start());
            System.out.println(matcher.end());
            System.out.println(content.substring(matcher.start(),matcher.end()));
        }

        System.out.println("整体匹配 " + matcher.matches());

        regStr = "hspedu";
        pattern = Pattern.compile(regStr);
        matcher = pattern.matcher(content);

        String newContent = matcher.replaceAll("韩顺平教育");//并没有改变原来的content
        System.out.println("content = " + content);
        System.out.println("new = " + newContent);

    }
}

反向引用

  1. 分组 可以使用()组成一个比较复杂的匹配模式,一个圆括号的部分我们可以看作一个子表达式/一个分组
  2. 捕获 把正则表达式中子表达式/分组匹配内容,保存到一个组里,方便后面引用 0代表整个表达式
  3. 反向引用 圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式
package com.hspedu.RegExp;

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

public class RegExp12 {
    public static void main(String[] args) {
        String content = "hello hspedu11111 hello22 12345-111222333";

        //找到两个连续相同的数字
//        String regStr = "(\\d)\\1";

        //找到五个连续相同的数字
//        String regStr = "(\\d)\\1{4}";

        //找到个位与千位相同 十位与百位相同的数字
//        String regStr = "(\\d)(\\d)\\2\\1";

        //找到以下格式 "五位数-九位数连续每三位相同(例如:12345-111222333)"
        String regStr = "\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

替换分割匹配

package com.hspedu.RegExp;

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

public class RegExp13 {
    public static void main(String[] args) {
        String content = "我....我要....学学学学....编程java!";

        //去掉所有的 .
        Pattern pattern = Pattern.compile("\\.");
        Matcher matcher = pattern.matcher(content);
        content = matcher.replaceAll("");

        System.out.println("content=" + content);

        //去掉重复的字 (.)查找任意的字符 \\1反向引用出'(.)'的内容 +指重复多次 $1表示重复字符替换为1个
        //如果要替换ABAB型 例如"我要我要" 使用(..)\\1+
        content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");

        System.out.println("content=" + content);
    }
}

练习题

package com.hspedu.RegExp;

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

public class RegExpHomework {
    public static void main(String[] args) {
        //匹配电子邮箱 例如 shu@sohu.com shu@sougo.org.cn
        String content01 = "shu@sougo.org.cn";

        //[\\w-](@前面的英文) @([a-zA-z]+\.)(至少匹配一次@英文.)
        String regStr01 = "^[\\w-]+@([a-zA-z]+\\.)+[a-zA-Z]+$";

        if (content01.matches(regStr01)) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

        //匹配整数或者小数
        String content02 = "-0.56";

        //([1-9]\d*|0)判断整数部分 不能出现0034.56
        String regStr02 = "^[-+]?([1-9]\\d*|0)(\\.\\d+)?$";

        if (content02.matches(regStr02)) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

        //解析url
        String content03 = "http://www.sohu.com:8080/abc/index.html";

        String regStr03 = "^([a-zA-Z]+)://([a-zA-Z.]+):(\\d+)[\\w-/]*/([\\w.]+)$";

        Pattern pattern = Pattern.compile(regStr03);
        Matcher matcher = pattern.matcher(content03);

        if (matcher.matches()) {
            System.out.println("true");
            System.out.println("整体匹配=" + matcher.group(0));
            System.out.println("协议=" + matcher.group(1));
            System.out.println("域名=" + matcher.group(2));
            System.out.println("端口=" + matcher.group(3));
            System.out.println("文件=" + matcher.group(4));
        } else {
            System.out.println("false");
        }
    }
}

  1. 0-9 ↩︎

  2. 0-9 ↩︎

2021年JavaSE学习路线 (博主去全力学前端辽咕咕咕) 跟着老韩学JAVA 冲呐! 阅读详情

相关推荐

韩顺平 深入浅出 js第十一章 正则表达式详解.ppt

正则表达式详解.ppt js 深入理解正则表达式应用 深入浅出

韩顺平Java学习笔记_正则表达式专题(非常实用!)

正则表达式详解

m0_62661440的博客 586

FPGA远程升级避坑指南:用AXI Quad SPI IP读写N25Q128 Flash的完整流程

本文详细介绍了FPGA远程升级过程中使用AXI Quad SPI IP读写N25Q128 Flash的完整流程,包括IP核配置、Flash操作指令集、双镜像备份设计及生产级远程升级协议。通过最佳实践和避坑策略,帮助开发者实现可靠的镜像更新方案,提升系统可靠性和可维护性。

weixin_30542079的博客 673

B站韩顺平java学习笔记(二十五)-- 正则表达式章节

正则表达式

LW_20180806的博客 6万+

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

c++2048小游戏编写

最近编写了一个小游戏,叫作2048,用到了面向对象的知识。

一个学生的博客 2371

韩顺平Java-第二十六章:正则表达式

正则表达式的使用

weixin_47199727的博客 853

基于FPGA的图像预处理系统(图)

 北京机械工业学院 韩娟娟 邓文怡 娄小平 由于获取图像的工具或手段的影响,使获取图像无法完全体现原始图像的全部信息。因此,对图像进行预处理就显得非常重要。预处理的目的是改善图像数据,抑制不需要的变形或者增强某些对于后续处理来说比较重要的图像特征。通常根据预处理目的的不同,把预处理技术归为图像增强技术和图像分割技术两类。图像对比度处理是空间域图像增强的一种方法。由于图像灰度范围狭窄会使

lyzhangxianglove的专栏 1779

基于Java的正则表达式大全 by韩顺平

18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

qq_41891655的博客 369

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题以及解决方法进行简单的总结,以供大家参考。 1 CFX-Solver Manager内存种类 打开Define Run,面板上的Partitioner、Solver、Interpolator选项中分别都有关于内存的设置选项。当出现内存不足错误时,应该设置哪一个选项的内存参数,要看是哪一部分的内存不足。 2 C

深海民工CFDer 3万+

PCL 欧式聚类分割【2026最新版】

PCL中欧式聚类提取算法原理详解、代码实现以及一个大自然场景地物分割提取并保存分割结果到本地文件夹的应用案例。

点云侠的博客 40万+

java笔记-韩顺平

感觉跟向上转型有点像interface 接口名{//属性//方法(1、抽象方法。2、默认实现方法 3、静态方法)class 类名 implements 接口{自己属性;自己方法;必须实现的接口的抽象方法1、在jdk7.0接口里的所有方法都没有方法体,都是抽象方法2、jdk8.0后接口可以有静态方法,默认方法,即接口中可以有方法的具体实现//在接口中,抽象方法可以省略abstract关键字//default修饰的默认实现//static 修饰的静态方法。

Haya_7的博客 1106

Open3D——直通滤波(python详细过程版)【2025最新版】

python就一个字:强。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 7515

韩顺平 2021零基础学Java 学习笔记(5)(自用)

目录第 25 章 JDBC 和数据库连接池第 27 章 正则表达式 第 25 章 JDBC 和数据库连接池 25.1 JDBC 概述 25.1.1 基本介绍 25.1.3 JDBC 带来的好处 25.1.4 JDBC API 25.2 JDBC 快速入门 25.2.1 JDBC 程序编写步骤 25.2.3 JDBC 第一个程序 package com.hspedu.jdbc; import com.mysql.jdbc.Driver; import java.sql.Connection; im

weixin_43973189的博客 6823

[QMT和ptrade量化交易小白入门]-109、小市值选股的基础上用六脉神剑评分,回测年化可到132%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1859

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

适合有编程基础的人看的《韩顺平零基础30天学java》笔记【最后一章:正则表达式】

研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。

feifeide123的博客 803

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

B站韩顺平的正则表达式学习

正则表达式RegExp是对字符串进行模式匹配的一个公式,适用于处理文本工作。正则表达式不是只有java有,实际上PHP,JavaScript等许多编程语言都支持正则表达式对字符串操作。如果想要灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符分组我们可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看做一个子表达式/一个分组捕获。

weixin_44226752的博客 1426

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java正则表达式 韩顺平 跟学

Java正则表达式

心向阳光的天域的博客 4万+

韩顺平JAVA2022-正则表达式笔记

注意:正则表达式模式匹配中,匹配的是一段字符串中出现自己规定模式出现的位置[起始位置,末位置]等价于[起始位置,末位置+1),匹配完成后存入的int数组,存入的也是位置,分组后存入的也是位置,只是存入不同的数组.start(),end(),返回匹配字符串,在原字符串中出现的位置(源码那一样,开始位置,末位置加1)在1后面,所以表示当匹配字符a1时,1的个数为0个或者1个,可以匹配a,a1。a1+ 因为 + 在1后面,所以表示当匹配字符a1时,1的个数为1个或者多个,至少匹配a1。当限定符 * 或+ 与?

2301_76270413的博客 308

html百度首页制作视频,韩顺平 轻松搞定网页设计 html+css+js

韩顺平老师的教程影响着一代又一代的学子们,他的视频教程确实做的很经典,不论是java、php还是网页设计,都有出彩的地方。这里,小编给大家分享韩顺平老师的轻松搞定网页设计教程,绝对完整,全部存于百度网盘中,欢迎下载!html css js的关系html是网页的结构,css是网页的表达形式,JS是脚本语言;形象一点说就是,html相当于人里面的器官,组成了人体;而Css就是你穿着的衣服,即使html...

weixin_31147827的博客 512

韩顺平Java | C27 正则表达式

需求:提取文本中某类字符传统方法:遍历每个字符,判断其是否在ASCII码中某种类型得编码范围内,代码量大,效率不高正则表达式(RegExp, regular expression):处理文本的利器,是对字符串执行模式匹配的技术。java\javascript\php等语言都支持。

媛媛 555

java版正则表达式笔记--韩顺平老师

Java版 正则表达式,学会正则表达式,释放你的双手..正则表达式

楠小弟的博客 616

Java 正则表达式(深度长文)

Java正则表达式(深度长文)

senxu_的博客 7万+

【codequ】Java学习路线整理(韩顺平)

参照韩顺平老师的建议整理的JAVA工程师的学习路线,待更新完整

weixin_42164880的博客 2185

正则表达式(3)——习题练习

韩顺平老师 B站 习题练习 public static void main(String[] args) { String content = "wu6426-miao@org.com"; if(content.matches("^[\\w-]+@([a-zA-Z]+\\.)+[a-zA-Z]+$")){ System.out.println("合法"); }else{ System.out.println("不合法"); } } public static void main(St

wu6426的博客 151

【零基础 快速学Java】韩顺平 零基础30天学会Java---正则表达式(regular expression => RegExp)(2024JavaReview)

如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符(Metacharacter)从功能上大致分为限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符。

Frank---7的博客 894
上一篇: 数据结构与算法(Java)-前后缀分解题单
下一篇: 数据结构与算法(Java)-树形DP题单
我是鼠鼠大王666
博客等级 码龄4年 368粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值