当前位置: 首页 > news >正文

Java基础-正则表达式

文章目录

    • 1.基本介绍
    • 2.正则底层实现
        • 1.matcher.find()完成的任务
        • 2.matcher.group(0)分析
          • 1.源代码
          • 2.解释(不分组)
          • 3.解释(分组)
        • 3.总结
    • 3.正则表达式语法
        • 1.基本介绍
        • 2.元字符的转义符号
          • 1.基本介绍
          • 2.代码实例
        • 3.字符匹配符
          • 1.基本介绍
          • 2.字符匹配案例一
          • 3.字符匹配案例二
        • 4.选择匹配符
          • 1.基本介绍
          • 2.代码实例
        • 5.正则限定符
          • 1.基本介绍
          • 2.代码实例
        • 6.正则定位符
          • 1.基本介绍
          • 2.代码实例
        • 7.捕获分组
          • 1.基本介绍
          • 2.代码实例
        • 8.非捕获分组
          • 1.基本介绍
          • 2.代码实例
        • 9.非贪婪匹配
          • 代码实例
    • 4.正则应用实例
        • 1.题目
          • 代码
        • 2.验证复杂URL
        • 3.注意事项
    • 5.正则表达式三个常用类
        • 1.Pattern类
          • 整体匹配
          • 代码实例
        • 2.Matcher类
          • 代码实例
    • 6.反向引用
        • 1.基本介绍
        • 2.反向引用案例
          • 案例一
          • 代码实例
          • 案例二——结巴去重
          • 代码实例
    • 7.String类型使用正则表达式替换
        • 题目一(replaceAll)
        • 题目二(matches)
        • 题目三(split)
          • 按照#、-、~或者数字来分割
    • 8.本章练习
        • 练习一
        • 练习二
        • 练习三
    • 9.正则表达式大全

1.基本介绍

image-20240120185017604

2.正则底层实现

1.matcher.find()完成的任务
  1. 根据特定的规则,找到满足要求的字符串
  2. 找到后将索引放到mather对象的属性int[] groups;
  3. 字符串的第一个字符的索引放到groups[0],最后一个字符的索引加一放到groups[1]
2.matcher.group(0)分析
1.源代码

image-20240120192748099

2.解释(不分组)
  1. 前面的都是做的验证,直接看最后一句话
  2. 传进的参数是0,所以返回的是groups[0 * 2]groups[0 * 2 + 1]也就是截取索引为groups[0]groups[1]的内容并转换成String类型
  3. 总结一下,group[0]就是返回截取到的整个字符串
3.解释(分组)
  1. String regStr = "(\\d\\d)(\\d\\d)";
  2. 上面的这种情况就是分组的情况
  3. 此时groups数组记录的情况看下图image-20240120192259354
  4. 总结一下,在分组的情况下,group[x]对应groups[y]的下标
    1. x = 0 : y = 0, 1
    2. x = 1 : y = 2, 3
    3. x = 2 : y = 4, 5
    4. 以此类推
3.总结
  1. matcher.find()就是查找匹配到的字符串
  2. group(0)就是返回整个查找到的字符串,group(1)、(2)…就是返回第一组、第二组…匹配的字符串

3.正则表达式语法

1.基本介绍

image-20240120195118911

2.元字符的转义符号
1.基本介绍

image-20240120195649048

image-20240120200757289

2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp02 {public static void main(String[] args) {//内容String content = "abc$(abc(123(";//要匹配的样式String regStr = "\\("; //转义符\\//1.传入匹配的样式,创建模式对象Pattern compile = Pattern.compile(regStr);//2.传入要匹配的内容,创建匹配器对象Matcher matcher = compile.matcher(content);//3.开始匹配while (matcher.find()) {System.out.println("匹配到:" + matcher.group(0));}}
}
3.字符匹配符
1.基本介绍

image-20240120201158697

image-20240120201242068

2.字符匹配案例一

image-20240121091506517

package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp03 {public static void main(String[] args) {String content = "a11c8aBC";
//        String regStr = "[a-z]"; //a到z
//        String regStr = "[A-Z]"; //A到Z
//        String regStr = "(?i)abc"; //匹配abc字符串不区分大小写
//        String regStr = "a((?i)bc)"; //匹配bc不区分大小写
//                String regStr = "abc";String regStr = "[^a-z]{2}"; //匹配非a到z的两个字符Pattern compile = Pattern.compile(regStr); //模式对象
//        Pattern compile = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE); //匹配时不区分大小写Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println("找到:" + matcher.group(0));}}
}
3.字符匹配案例二

image-20240121091538807

package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp04 {public static void main(String[] args) {String content = "asdg";String regStr = "[abcd]"; //abcd任意一个字符String regStr1 = "[^abcd]"; //除了abcdString regStr2  = "[\\d]"; //任意数字String regStr3 = "[\\D]"; //任意非数字String regStr4 = "[\\w]"; //任意数字字母,下划线String regStr5 = "[\\W]"; //非数字字母,下划线String regStr6 = "[\\s]"; //匹配任意空白字符,空格制表符等String regStr7 = "[\\S]"; //匹配任意非空白字符String regStr8 = "[.]"; //匹配除了\n以外的任何字符,如果要匹配.则需要加\\//模式对象Pattern compile = Pattern.compile(regStr);//匹配对象Matcher matcher = compile.matcher(content);//开始匹配while (matcher.find()) {System.out.println("匹配到:" + matcher.group(0));}}
}
4.选择匹配符
1.基本介绍

image-20240121092601766

2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp05 {public static void main(String[] args) {String content = "hanshunping 韩顺平";String regStr = "han|韩"; //匹配到han或韩Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println("匹配到:" + matcher.group(0));}}
}
5.正则限定符
1.基本介绍

image-20240121093136953

image-20240121093316964

2.代码实例
package regexp;/*** @author 孙显圣* @version 1.0*/
public class RegExp06 {public static void main(String[] args) {String content = "aaaaaaa11111";String regStr = "a{3}"; //匹配三个aString regStr1 = "1{4}"; //匹配四个1String regStr2 = "(\\d){2}"; //匹配两个数字String regStr3 = "a{3, 4}"; //匹配三到四个a//java默认贪婪匹配,默认匹配多的String regStr4 = "1{4, 5}"; //匹配四到五个1String regStr5 = "\\d{2, 5}"; //匹配二到五个数字String regStr6 = "1+"; //匹配一个或多个1String regStr7 = "a*"; //匹配任意个aString regStr8 = "1?"; //匹配0个或一个1}
}
6.正则定位符
1.基本介绍

image-20240121094557124

2.代码实例
package regexp;/*** @author 孙显圣* @version 1.0*/
public class RegExp07 {public static void main(String[] args) {String str1 = "^[0-9]+[a-z]*"; //至少一个数字开头,任意个小写字母结尾String str2 = "^[0-9]\\-[a-z]+$"; //以一个数字开头后接一个“-”以至少一个小写字母结尾String str3 = "han\\b"; //匹配han的后边界,即han后面没东西,或者是空格String str5 = "han\\B"; //匹配han的前边界,即han前面没东西,或者是空格}
}
7.捕获分组
1.基本介绍

image-20240121100556620

2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp08 {public static void main(String[] args) {String content = "hanshunping s7789 nn1189han";String regStr = "(\\d\\d)(\\d\\d)"; //非命名分组String regStr1 = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //非命名分组//模式对象Pattern compile = Pattern.compile(regStr1);//匹配对象Matcher matcher = compile.matcher(content);while (matcher.find()) {
//            System.out.println(matcher.group(1)); //分组一
//            System.out.println(matcher.group(2)); //分组二//命名分组,可以使用编号或者名字System.out.println(matcher.group("g1")); //分组一System.out.println(matcher.group("g2")); //分组二}}
}
8.非捕获分组
1.基本介绍

image-20240121101406993

2.代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0* 非捕获分组*/
public class RegExp09 {public static void main(String[] args) {String content = "hello韩顺平教育 jack韩顺平老师 韩顺平同学hello";//        String regStr = "韩顺平(?:教育|老师|同学)"; //匹配韩顺平教育韩顺平老师韩顺平同学
//        String regStr = "韩顺平(?=教育|老师|同学)"; //匹配韩顺平后面有教育|老师|同学的韩顺平,也就是三个String regStr = "韩顺平(?!教育|老师)"; //匹配韩顺平后面没有教育|老师的韩顺平,也就是只有一个Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}
}
9.非贪婪匹配
代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp10 {public static void main(String[] args) {String content = "hello111111";String regStr ="\\d+?";//在限定符后面加?表示非贪婪匹配,这里每次就匹配一个1Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}
}

4.正则应用实例

1.题目

image-20240121102950135

代码
package regexp;import org.junit.jupiter.api.Test;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExercise {//汉字public static void main(String[] args) {String content1 = "史蒂夫";String regStr1 = "^[\u3091-\uffe5]+$"; //匹配至少一个汉字,并规定了开头结尾为空Pattern compile = Pattern.compile(regStr1);Matcher matcher = compile.matcher(content1);if (matcher.find()) {System.out.println("匹配成功");}else {System.out.println("匹配失败");}}//邮政编码 1-9开头的一个六位数@Testpublic void find1() {String content1 = "123458";String regStr1 = "^[1-9]\\d{5}$"; //匹配1-9开头的一个六位数Pattern compile = Pattern.compile(regStr1);Matcher matcher = compile.matcher(content1);if (matcher.find()) {System.out.println("匹配成功");}else {System.out.println("匹配失败");}}//qq号码 1-9开头的一个(5位到10位数)@Testpublic void find2() {String content1 = "1721469477";String regStr1 = "^[1-9]\\d{4,9}$"; //匹配1-9开头的一个六位数Pattern compile = Pattern.compile(regStr1);Matcher matcher = compile.matcher(content1);if (matcher.find()) {System.out.println("匹配成功");}else {System.out.println("匹配失败");}}//手机号码 13,14,15,18开头的11位数@Testpublic void find3() {String content1 = "13604959178";String regStr1 = "^1(?:3|4|5|8)\\d{9}$"; //匹配1-9开头的一个六位数String regStr2 = "^1(3|4|5|8)\\d{9}$"; //匹配1-9开头的一个六位数Pattern compile = Pattern.compile(regStr2);Matcher matcher = compile.matcher(content1);if (matcher.find()) {System.out.println("匹配成功");}else {System.out.println("匹配失败");}}
}
2.验证复杂URL
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegUrl {public static void main(String[] args) {
//        String content = "https://www.bilibili.com/video/BV1fh411y7R8?p=894&vd_source=6ca8808c5ff14bd32a1acd1b4774a821";String content = "https://www.bilibili.com";String regStr = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&%.#]*)?$";//注意:在[.]指的是真的.Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);if (matcher.find()) {System.out.println("匹配成功");}else {System.out.println("匹配失败");}}
}
3.注意事项

在使用常规方法验证的时候一定要加定位符^和$

5.正则表达式三个常用类

1.Pattern类
整体匹配

image-20240121134948084

代码实例
package regexp;import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp11 {public static void main(String[] args) {//整体匹配,不需要添加定位符,直接匹配整体String content = "我是孙先生12321";String pattern = ".{5}\\d{5}";boolean matches = Pattern.matches(pattern, content);System.out.println(matches);}
}
2.Matcher类
代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp12 {public static void main(String[] args) {String content = "hello edu jack hello tom hspedu hspedu";String regStr = "hspedu";Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println("==================");//分别返回每次匹配到的起始索引和结束索引加一System.out.println(matcher.start());System.out.println(matcher.end());}//整体匹配方法System.out.println(matcher.matches());//把所有的hspedu替换成韩顺平教育,不是真的替换,因为String是不可变类型的,只能返回另一个String类型的对象String s = matcher.replaceAll("韩顺平教育");System.out.println(s);}
}

6.反向引用

1.基本介绍

image-20240121141412448

2.反向引用案例
案例一

image-20240121142003409

代码实例
package regexp;import org.junit.jupiter.api.Test;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp13 {public static void main(String[] args) {String content = "1221 jack 5225 jack33 yyy xxx";String regStr = "(\\d)(\\d)\\2\\1"; //每次匹配过后数字都会被记录下来,在后面就可以引用Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(content);while (matcher.find()) {System.out.println(matcher.group(0));}}//整体匹配检索编号 12321-333999111这样的号码@Testpublic void find1() {String content = "12321-333999111";String regStr = "\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}";//获取模式对象Pattern compile = Pattern.compile(regStr);//获取匹配器Matcher matcher = compile.matcher(content);//整体匹配System.out.println(matcher.matches());}}
案例二——结巴去重

image-20240121143015380

代码实例
package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class RegExp14 {public static void main(String[] args) {String content = "我...我我要....学学学学。。。编程java";String regStr = "(.)\\1+"; //匹配所有重复的字符Pattern compile = Pattern.compile(regStr); //获取模式Matcher matcher = compile.matcher(content); //获取匹配器//在外部反向引用使用$,去重String s = matcher.replaceAll("$1");System.out.println(s);}
}

7.String类型使用正则表达式替换

题目一(replaceAll)

image-20240121145023750

    public static void main(String[] args) {String content = "2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日,J2EE1.3发布。2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。";//使用正则表达式将jdk1.3和1.4替换成jdkString s = content.replaceAll("JDK1\\.3|JDK1\\.4", "JDK");System.out.println(s);}
题目二(matches)

image-20240121145835354

    public static void main(String[] args) {//验证这个手机号是否是138,139开头的String content = "13888889999";boolean matches = content.matches("^(138|139)\\d{8}");System.out.println(matches);}
题目三(split)
按照#、-、~或者数字来分割
package regexp;/*** @author 孙显圣* @version 1.0*/
public class Regexp15 {public static void main(String[] args) {String content = "hello#abc-jack12smith~北京";//按照指定符号分割String[] split = content.split("[#\\-~]");for (String s : split) {System.out.println(s);}}
}

8.本章练习

练习一

image-20240121150850628

package regexp;import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class HomeWork01 {public static void main(String[] args) {String content = "1-721469477@qq.com";String regStr = "[\\w-]+@([a-zA-Z]+\\.)+[a-zA-Z]+";//整体匹配boolean matches = Pattern.matches(regStr, content);System.out.println(matches);}
}
练习二

image-20240121152315100

package regexp;/*** @author 孙显圣* @version 1.0*/
public class HomeWork02 {public static void main(String[] args) {String content1 = "1223";String content2 = "-1223";String content3 = "12.23";String content4 = "+1223";String content5 = "0.89";//匹配整数或小数String regStr = "[-+]?([1-9]\\d*|0)(\\.\\d+)?";boolean matches = content5.matches(regStr);System.out.println(matches);}
}
练习三

image-20240121155901112

package regexp;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author 孙显圣* @version 1.0*/
public class HomeWorrk03 {public static void main(String[] args) {String url = "http://www.sohu.com:8080/abc/dfs/df/index.htm";//分组解析String regStr = "^([a-zA-Z]+)://([a-zA-Z.]+):(\\d+)[/\\w-]*/([a-zA-Z.]+)$";Pattern compile = Pattern.compile(regStr);Matcher matcher = compile.matcher(url);if (matcher.matches()) {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("匹配失败");}}
}

9.正则表达式大全

java正则表达式大全(参考).zip

相关文章:

Java基础-正则表达式

文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释&#xff08;不分组&#xff09;3.解释&#xff08;分组&#xff09; 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.…...

构建Pytorch虚拟环境教程

构建PyTorch虚拟环境通常涉及使用诸如Anaconda或venv等工具来管理Python环境&#xff0c;以便在一个独立的空间中安装PyTorch和其他依赖项。以下是使用Anaconda创建PyTorch虚拟环境的步骤&#xff08;适用于不同操作系统&#xff0c;包括Windows、Linux和MacOS&#xff09;&…...

uniapp页面嵌套其他页面的实现

功能: 类似于一个drawer&#xff0c;当主页面加载的时候会一并加载url对应的组件&#xff0c;当点击后以drawer形式显示组件里面的内容&#xff0c;可动画。 <navigator url"/pages/my/components/personalMessage" slot"right"><view><di…...

XUbuntu22.04之安装Plantuml(二百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

第四周刷题小结

第一天 P1068 [NOIP2009 普及组] 分数线划定 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; 这个题感觉不难&#xff0c;主要是用到了结构体cmp的自定义排序&#xff0c;但是还是错了一次&#xff0c;就是没注意到题目给的条件。 #include<iostream&g…...

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生&#xff0c;为了更好的使校园考研有一个更好的环境好好的学习&#xff0c;建议一个好的校园网站&#xff0c;是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…...

项目2-用户登录

1.创建项目 2.引入前端代码并检查是否有误 3.定义接口 需求分析 对于后端开发⼈员⽽⾔, 不涉及前端⻚⾯的展⽰, 只需要提供两个功能 1. 登录⻚⾯: 通过账号和密码, 校验输⼊的账号密码是否正确, 并告知前端 2. ⾸⻚: 告知前端当前登录⽤⼾. 如果当前已有⽤⼾登录, 返回登录的账…...

网易web安全工程师进阶版课程

课程介绍 《Web安全工程师&#xff08;进阶&#xff09;》是由“ i春秋学院联合网易安全部”出品&#xff0c;资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战&#xff0c;帮助学员纵向提升技能&#xff0c;横向拓宽视野&#xff0c;牢靠掌握Web安全工程师核心…...

【Postman】工具使用介绍

一、postman工具介绍 1.什么是postman postman是谷歌开发的一款网页调试和接口测试工具&#xff0c;能够发送任何请求类型的http请求&#xff0c;支持GET/POST/PUT/DELETE等方法。postman简单易用&#xff0c;可以直接填写URL&#xff0c;header&#xff0c;body就可以发送一…...

【vue核心技术实战精讲】1.3 - 1.6 VUE 指令 (上)

前言 上节,我们学习了 Vue的起步 和 插值表达式 本节内容 Vue指令之v-text 和 v-htmlVue指令之v-if 和 v-showVue指令之v-bind绑定Vue指令之v-on事件处理 1、v-text 和 v-html {{}} 和v-text的作用是一样的 都是插入值,直接渲染 ≈ innerTextv-html既能插入值 又能插入标签…...

vscode使用Runner插件将.exe文件统一放到一个目录下

找到右下角管理&#xff0c;点击扩展。 找到Code Runner插件&#xff0c;打开扩展设置。 向下翻&#xff0c;找到Executor Map&#xff0c;点击在settings.json中编辑。 在c和c的配置命令栏中增加\\\output\\即可。&#xff08;增加的目录不能自动创建&#xff0c;需要手动创建…...

[commonjs--resolver] Missing “./jsx-runtime.js“ specifier in “react“ package

修复vite构建时错误 vite打包,第三方包引用的react版本不一致问题修复(不是最优解) // vite.config.js import { defineConfig } from vite; import react from vitejs/plugin-react; import path from path;export default defineConfig({plugins: [react(), // 如果使用Rea…...

ETH Gas 之 Base Fee Priority Fee

前情回顾 ETH网络 之 Gas EIP-1559 EIP-1559 EIP-1559是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;&#xff0c;旨在改进以太坊的交易费用机制。该提案引入了一种新的交易费用模型&#xff0c;以提高交易费用的可预测性和网络的效率。我们本文各…...

【小白入门篇1】GPT到底是怎样练成?

由于具有代表性的OpenAI公司GPT模型并没有开源&#xff0c;所以本章节是参考一些开源和现有课程&#xff08;李宏毅&#xff09;讲解ChatGPT原理。本章没有涉及到很多数学运算&#xff0c;比较适合小白了解GPT到底是怎么练成。GPT的三个英文字母分别代表Generative(生成式)&…...

Django——forms组件

Django——forms组件 forms组件&#xff1a;通过后端在Django中定义forms类&#xff0c;可以在 html 中动态的生成一个表单&#xff1b;检验用户提交的数据。 在应用中创建一个名为 &#xff1a;forms 的py文件 # 导入 forms 组件 from django import forms# 自定义 forms …...

利用K8S Statefulset搭建Etcd集群 - PVC存储

概述 在测试过程中发现&#xff0c;直接使用本地存储&#xff0c;当节点机器损坏了&#xff0c;对应机器的etcd数据也丢失了&#xff0c;故而做了利用K8S PV&#xff0c;PVC以及NFS来存储数据的尝试&#xff0c;经过一番折腾&#xff0c;测试成功&#xff0c;博文记录&#xf…...

手撕算法-接雨水

描述 分析 i位置能积累的雨水量&#xff0c;等于其左右两边最大高度的最小值。为了能获取i位置左右两边的最大高度。使用动态规划。两个dp数组&#xff1a; leftMaxrightMax 其中 leftMax[i] 代表i位置左边的最大高度rightMax[i] 代表i位置右边的最大高度 初始状态&#x…...

探索AI大模型学习:理论基础、技术突破与未来挑战

在当今技术飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;大模型学习无疑是推动科技进步和创新的关键力量。AI大模型学习的核心在于通过训练大规模的数据集来提升模型的性能&#xff0c;使之能够更准确、更高效地完成各种任务&#xff0c;从而在多个领域中实现…...

Linux:点命令source

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 source命令用于读取一个文件的内容并在当前Shell环境&#xff08;包括交互式Shell或是非交互式Shell&#xff09;执行里面的命令。它被称为点命令是因为命令名source也可…...

iOS开发 - 转源码 - __weak问题解决

iOS开发 - 转源码 - __weak问题解决 在使用clang转换OC为C代码时&#xff0c;可能会遇到以下问题 cannot create __weak reference in file using manual reference 原因 __weak弱引用是需要runtime支持的&#xff0c;如果我们还只是使用静态编译&#xff0c;是无法正常转换的…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...