Java正则表达式详解万字笔记内容丰富
正则表达式
1.1 正则表达式的概念及演示
在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否符合这些规则。
示例:QQ号码验证
先看一个不使用正则表达式的例子:验证QQ号码是否符合以下规则:
- QQ号码必须是5-15位长度。
- 必须全部是数字。
- 首位不能为0。
package com.rckivy.demo;public class RegexDemo1 {public static void main(String[] args) {String qq = "1234567890";System.out.println(checkQQ(qq));// 使用正则表达式简化验证System.out.println(qq.matches("[1-9]\\d{4,14}"));}// 自定义验证QQ号的方法,不使用正则表达式public static boolean checkQQ(String qq) {int len = qq.length();if (len < 5 || len > 15) { return false;}if (qq.startsWith("0")) { return false;}for (int i = 0; i < len; i++) {char c = qq.charAt(i);if (c < '0' || c > '9') {return false;}}return true;}
}
使用正则表达式简化验证:
public class RegexDemo {public static void main(String[] args) {String qq = "1234567890";System.out.println(qq.matches("[1-9]\\d{4,14}"));}
}
这里的正则表达式 [1-9]\\d{4,14}
表示:
[1-9]
:首位不能为0,只能是1-9。\\d{4,14}
:接下来4到14位必须是数字,总长度为5到15位。
1.2 正则表达式 - 字符类
正则表达式中,可以使用字符类来定义匹配规则,常见的字符类包括:
[abc]
:表示a、b、c中任意一个字符。[^abc]
:表示除a、b、c以外的任意字符。[a-z]
:表示a到z的所有小写字母。[A-Z]
:表示A到Z的所有大写字母。[0-9]
:表示0到9的数字。[a-zA-Z0-9]
:表示a到z、A到Z和0到9的任意一个字符。[a-dm-p]
:表示a到d或m到p之间的任意字符。
代码示例:
package com.rckivy.demo;public class RegexDemo2 {public static void main(String[] args) {// 使用字符类匹配System.out.println("a".matches("[abc]")); // trueSystem.out.println("z".matches("[abc]")); // falseSystem.out.println("x".matches("[^abc]")); // true// 匹配字母范围System.out.println("z".matches("[a-zA-Z]")); // trueSystem.out.println("A".matches("[a-zA-Z]")); // trueSystem.out.println("0".matches("[a-zA-Z]")); // false// 匹配多个字符System.out.println("z".matches("[a-zA-Z][a-zA-Z]")); // falseSystem.out.println("ab".matches("[a-zA-Z][a-zA-Z]")); // true}
}
1.3 正则表达式 - 逻辑运算符
正则表达式中使用逻辑运算符可以灵活地构造匹配模式:
&&
:并且,表示组合多个条件。|
:或者,表示在多个条件之间选择一个。\
:转义字符,用于转义特殊字符。
代码示例:
public class RegexDemo {public static void main(String[] args) {// 逻辑运算符匹配String regex = "[a-z&&[^aeiou]]ad"; // 匹配以小写辅音字符开头,后跟adSystem.out.println("bad".matches(regex)); // trueSystem.out.println("had".matches(regex)); // trueregex = "[a|e|i|o|u]ad"; // 匹配以元音字符开头,后跟adSystem.out.println("oad".matches(regex)); // trueSystem.out.println("had".matches(regex)); // false}
}
1.4 正则表达式 - 预定义字符
预定义字符类简化了常见字符组的书写,常见的预定义字符类包括:
.
:匹配任意字符(除了换行符)。\d
:匹配任意数字字符(0-9)。\D
:匹配任意非数字字符。\s
:匹配空白字符(空格、制表符等)。\S
:匹配非空白字符。\w
:匹配单词字符(字母、数字、下划线)。\W
:匹配非单词字符。
代码示例:
public class RegexDemo {public static void main(String[] args) {// 匹配单个字符System.out.println("a".matches("\\w")); // true, 匹配单词字符System.out.println("你".matches("\\w")); // false, 不是字母或数字System.out.println("3".matches("\\d")); // true, 匹配数字字符System.out.println(" ".matches("\\s")); // true, 匹配空格System.out.println("$".matches("\\W")); // true, 匹配非单词字符}
}
1.5 正则表达式 - 数量词
数量词用于指定字符或字符组的重复次数:
X?
:0次或1次。X*
:0次到多次。X+
:1次或多次。X{n}
:恰好n次。X{n,}
:至少n次。X{n,m}
:n到m次。
代码示例:
public class RegexDemo {public static void main(String[] args) {// 数量词匹配System.out.println("1234".matches("\\d{4}")); // true, 正好4位数字System.out.println("123".matches("\\d{2,4}")); // true, 2到4位数字System.out.println("a".matches("\\w+")); // true, 至少1个字母System.out.println("".matches("\\w*")); // true, 0个或更多字母}
}
1.6 正则表达式练习
需求:
- 请编写正则表达式验证用户输入的手机号码是否符合规则:
- 手机号码必须是以1开头的11位数字。
- 验证手机号码示例:
13112345678
、13712345667
。
代码示例:
public class RegexDemo {public static void main(String[] args) {String regex = "1[3-9]\\d{9}"; // 匹配手机号码System.out.println("13112345678".matches(regex)); // trueSystem.out.println("13712345667".matches(regex)); // trueSystem.out.println("13945679027".matches(regex)); // trueSystem.out.println("139456790271".matches(regex)); // false}
}
1.7 正则表达式练习2
需求:
-
验证用户名是否满足要求:
- 用户名由大小写字母、数字和下划线组成,长度为4-16位。
-
验证身份证号码:
- 简单要求:18位,前17位为数字,最后一位可以是数字或大写/小写的
x
。 - 复杂要求:严格按照身份证号码的格式进行验证,包括出生日期、地区代码等。
- 简单要求:18位,前17位为数字,最后一位可以是数字或大写/小写的
用户名验证
用户名的正则表达式规则:
String regex1 = "\\w{4,16}"; // \w 表示字母、数字或下划线,{4,16} 表示长度为4到16位
System.out.println("zhangsan".matches(regex1)); // true
System.out.println("user1234".matches(regex1)); // true
System.out.println("u".matches(regex1)); // false
System.out.println("$123".matches(regex1)); // false
简单身份证号码验证
身份证号的规则:
- 前17位为数字。
- 最后一位可以是数字,也可以是字母X(不区分大小写)。
String regex2 = "[1-9]\\d{16}[\\dXx]"; // 前17位为数字,最后一位为数字或X
System.out.println("41080119930228457x".matches(regex2)); // true
System.out.println("510801197609022309".matches(regex2)); // true
System.out.println("15040119810705387X".matches(regex2)); // true
System.out.println("12345678901234567X".matches(regex2)); // false (开头不能为0)
复杂身份证号码验证
在更复杂的身份证号码规则中,需要验证更多细节,包括:
- 前6位表示地区代码(不能以0开头)。
- 第7到14位表示出生日期,年份为18、19或20开头,月份为01到12,日期为01到31。
- 最后一位同样可以是数字或字母X。
String regex3 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";
System.out.println("41080119930228457x".matches(regex3)); // true
System.out.println("510801197609022309".matches(regex3)); // true
System.out.println("15040119810705387X".matches(regex3)); // true
System.out.println("130133197204039024".matches(regex3)); // true
1.8 本地数据爬取
Pattern 和 Matcher
在Java中,Pattern
类用来表示正则表达式,Matcher
类则是正则表达式应用到某个文本后的匹配结果对象。我们可以使用它们从大文本中提取出符合正则表达式的子串。
示例:从文本中爬取特定模式的数据
需求:
有如下文本,请从中爬取所有 JavaXX
的内容(XX代表任意数字)。
public class RegexDemo6 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本," +"目前企业中用的最多的是Java8和Java11," +"下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";// 1. 创建正则表达式的Pattern对象Pattern p = Pattern.compile("Java\\d{0,2}");// 2. 获取Matcher对象Matcher m = p.matcher(str);// 3. 循环查找匹配的内容while (m.find()) {System.out.println(m.group());}}
}
在上面的示例中,Java\\d{0,2}
匹配以 “Java” 开头,后面跟0到2个数字的字符串。m.find()
方法每次查找下一个符合条件的字符串,直到查找完毕。
1.9 网络数据爬取
有时候,我们不仅需要从本地数据中提取信息,还需要从网络上的网页中提取数据。这种场景下,可以通过Java中的 URL
和 URLConnection
来获取网页内容,然后使用正则表达式提取所需的数据。
示例:从网页中爬取身份证号码
需求:
从指定的网页中提取所有的身份证号码。
import java.io.*;
import java.net.*;
import java.util.regex.*;public class RegexDemo7 {public static void main(String[] args) throws IOException {// 创建URL对象,连接到网页URL url = new URL("https://example.com/sample_page.html");URLConnection conn = url.openConnection();// 使用BufferedReader读取网页内容BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;// 创建匹配身份证号的正则表达式String regex = "[1-9]\\d{16}[\\dXx]";Pattern pattern = Pattern.compile(regex);// 逐行读取网页内容,查找匹配项while ((line = br.readLine()) != null) {Matcher matcher = pattern.matcher(line);while (matcher.find()) {System.out.println(matcher.group());}}br.close();}
}
这个程序会从网页中逐行读取内容,并使用正则表达式 [1-9]\\d{16}[\\dXx]
匹配身份证号码。
1.10 正则表达式爬取数据练习
需求:
从给定的文本中提取出所有的座机号码、邮箱、手机号和热线电话。
文本内容:
来学校学习Java,手机号:18512516758,18512508907,或者联系邮箱:boniu@itbright.cn,
座机电话:010-36517895,010-98951256,邮箱:bozai@itbright.cn,
热线电话:400-618-9090,4006189090
代码实现:
public class RegexDemo8 {public static void main(String[] args) {String s = "来学校学习Java,手机号:18512516758,18512508907," +"或者联系邮箱:boniu@itbright.cn,座机电话:010-36517895,010-98951256," +"邮箱:bozai@itbright.cn,热线电话:400-618-9090,4006189090";// 正则表达式String regex = "(1[3-9]\\d{9})" + // 手机号"|(\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2})" + // 邮箱"|(0\\d{2,3}-?[1-9]\\d{4,9})" + // 座机"|(400-?\\d{3}-?\\d{4})"; // 热线电话Pattern p = Pattern.compile(regex);Matcher m = p.matcher(s);// 逐一查找并输出结果while (m.find()) {System.out.println(m.group());}}
}
1.11 按需求爬取特定数据
需求:
给定一段文本,爬取出所有符合条件的Java
版本信息。
文本内容:
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。
需求1:爬取版本号为 8、11 和 17 的 Java 文本,但只显示 “Java”,不显示版本号。
String regex1 = "((?i)Java)(?=8|11|17)"; // 使用正向肯定预查
需求2:爬取版本号为 8、11 和 17 的 Java 文本,显示完整的 “Java8”、“Java11” 和 “Java17”。
String regex2 = "((?i)Java)(8|11|17)"; // 匹配 Java 后面的版本号
需求3:爬取除版本号为 8、11、17 以外的 Java 文本。
String regex3 = "((?i)Java)(?!8|11|17)"; // 使用负向预查,排除指定的版本号
示例代码:
public class RegexDemo9 {public static void main(String[] args) { String s = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," + "下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";// 示例1:只匹配Java,不显示版本号String regex1 = "((?i)Java)(?=8|11|17)";Pattern p1 = Pattern.compile(regex1);Matcher m1 = p1.matcher(s);while (m1.find()) {System.out.println(m1.group());}// 示例2:显示Java和版本号String regex2 = "((?i)Java)(8|11|17)";Pattern p2 = Pattern.compile(regex2);Matcher m2 = p2.matcher(s);while (m2.find()) {System.out.println(m2.group());}}
}
1.12 贪婪匹配和非贪婪匹配
贪婪匹配:
在正则表达式中,默认情况下是贪婪匹配,即在满足匹配规则的情况下,它会尽可能多地匹配字符。
非贪婪匹配:
如果你希望正则表达式尽量少匹配字符,可以使用非贪婪匹配,即在限定范围内,尽量少地匹配字符。
贪婪匹配和非贪婪匹配的区别在于:
- 贪婪匹配:
*
、+
等默认是贪婪的,会尽量多匹配。 - 非贪婪匹配:在
*
、+
等后面加?
,则变为非贪婪匹配。
示例代码:
public class RegexDemo10 {public static void main(String[] args) {// 贪婪匹配:尽可能多地匹配String s1 = "abbbbbbbbbbbbaaaaaaaa";String regex1 = "ab+";Pattern p1 = Pattern.compile(regex1);Matcher m1 = p1.matcher(s1);while (m1.find()) {System.out.println("贪婪匹配:" + m1.group());}// 非贪婪匹配:尽可能少地匹配String regex2 = "ab+?";Pattern p2 = Pattern.compile(regex2);Matcher m2 = p2.matcher(s1);while (m2.find()) {System.out.println("非贪婪匹配:" + m2.group());}}
}
输出结果:
贪婪匹配:abbbbbbbbbbbb
非贪婪匹配:ab
1.13 使用正则表达式切割字符串
String的split方法
Java的 String
类提供了一个 split(String regex)
方法,允许根据正则表达式来拆分字符串。通过 split
,可以将匹配正则表达式的部分作为分隔符,从而把字符串切割成多个子串。
示例代码:
public class RegexSplitDemo {public static void main(String[] args) {// 示例字符串String s = "小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";// 使用正则表达式切割字符串,将所有非中文部分作为分隔符String[] arr = s.split("[\\w&&[^_]]+");// 遍历并打印结果for (String str : arr) {System.out.println(str);}}
}
输出结果:
小诗诗
小丹丹
小惠惠
1.14 使用正则表达式替换内容
String的replaceAll方法
Java中的 replaceAll(String regex, String replacement)
方法,可以使用正则表达式找到需要替换的内容,并将其替换为指定的字符串。这个方法会用 replacement
替换所有符合 regex
的匹配项。
示例代码:
public class RegexReplaceDemo {public static void main(String[] args) {// 示例字符串String s = "小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";// 使用正则表达式将所有非中文部分替换为"vs"String result = s.replaceAll("[\\w&&[^_]]+", "vs");// 打印替换后的字符串System.out.println(result);}
}
输出结果:
小诗诗vs小丹丹vs小惠惠
1.15 正则表达式-分组括号 ( )
分组括号 ()
在正则表达式中用于将部分表达式分组,以便后续引用或者进行逻辑处理。常见应用包括:
- 捕获:通过分组匹配特定内容,并通过组号进行提取。
- 反向引用:使用
\1
,\2
等引用之前的分组。 - 非捕获分组:使用
(?:...)
来仅进行分组而不进行捕获。
示例 1:反向引用
需求:判断一个字符串的开始和结束字符是否一致,只考虑单个字符。
public class RegexDemo {public static void main(String[] args) {// 匹配字符串的开始和结束字符是否一致String regex = "(.).+\\1"; // 捕获第一个字符,并在最后匹配同样的字符System.out.println("a123a".matches(regex)); // trueSystem.out.println("b456b".matches(regex)); // trueSystem.out.println("abcba".matches(regex)); // trueSystem.out.println("abcd".matches(regex)); // false}
}
示例 2:多字符反向引用
需求:判断字符串的开始和结束部分是否一致,并且允许多个字符。
public class RegexDemo {public static void main(String[] args) {// 匹配字符串的开始部分和结束部分是否一致,支持多字符String regex = "(.+).+\\1"; // 捕获开始部分,并在最后匹配相同的内容System.out.println("abc123abc".matches(regex)); // trueSystem.out.println("def456def".matches(regex)); // trueSystem.out.println("xyz789abc".matches(regex)); // false}
}
示例 3:非捕获分组
有时我们只需要分组但不需要捕获内容,这时可以使用非捕获分组 (?:...)
。这在提高效率和避免组号混淆时很有用。
public class RegexDemo {public static void main(String[] args) {// 使用非捕获分组,只分组不捕获String regex = "(?:abc)+"; // 匹配 "abc" 一次或多次,不捕获System.out.println("abcabc".matches(regex)); // trueSystem.out.println("abc".matches(regex)); // trueSystem.out.println("abcd".matches(regex)); // false}
}
1.16 忽略大小写匹配
在正则表达式中,我们可以使用 (?i)
来忽略大小写匹配。例如,(?i)abc
将匹配 abc
、ABC
、Abc
等大小写混合的情况。
在正则表达式中,可以使用 (?i)
来忽略大小写的匹配。
示例:
public class RegexDemo {public static void main(String[] args) {// 忽略大小写匹配 "abc"String regex = "(?i)abc"; // 忽略大小写匹配 "abc"System.out.println("abc".matches(regex)); // trueSystem.out.println("ABC".matches(regex)); // trueSystem.out.println("AbC".matches(regex)); // true}
}
局部忽略大小写:
public class RegexDemo {public static void main(String[] args) {// 匹配 "abc",只忽略中间的 "b" 大小写String regex = "a(?i)bC"; System.out.println("aBc".matches(regex)); // trueSystem.out.println("abc".matches(regex)); // false}
}
1.17 非捕获分组
有时候,我们希望将正则表达式的一部分进行分组,但不希望在匹配结果中引用这个分组。我们可以使用非捕获分组 (?:)
,这种分组不会占用分组编号。
示例:身份证号验证
需求:验证18位身份证号码,前17位必须为数字,最后一位可以是数字或大小写的 “X”。
public class RegexDemo {public static void main(String[] args) {// 非捕获分组,仅用于分组不捕获String regex = "[1-9]\\d{16}(?:\\d|X|x)";System.out.println("41080119930228457X".matches(regex)); // trueSystem.out.println("510801197609022309".matches(regex)); // trueSystem.out.println("15040119810705387x".matches(regex)); // true}
}
gex)); // true
System.out.println(“abc”.matches(regex)); // false
}
}
---## 1.17 非捕获分组有时候,我们希望将正则表达式的一部分进行分组,但不希望在匹配结果中引用这个分组。我们可以使用非捕获分组 `(?:)`,这种分组不会占用分组编号。### 示例:身份证号验证需求:验证18位身份证号码,前17位必须为数字,最后一位可以是数字或大小写的 "X"。```java
public class RegexDemo {public static void main(String[] args) {// 非捕获分组,仅用于分组不捕获String regex = "[1-9]\\d{16}(?:\\d|X|x)";System.out.println("41080119930228457X".matches(regex)); // trueSystem.out.println("510801197609022309".matches(regex)); // trueSystem.out.println("15040119810705387x".matches(regex)); // true}
}
相关文章:
Java正则表达式详解万字笔记内容丰富
正则表达式 1.1 正则表达式的概念及演示 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,…...
文件属性与目录
⚫ Linux 系统的文件类型; 普通文件:存储数据,如文本文件、可执行文件等。 目录:用于组织文件和其他目录的特殊文件。 符号链接:指向另一个文件或目录的引用,类似于 Windows 中的快捷方式。 硬链接&#x…...
5G 基站SCTP
如何实现SCTP多归属链路对接 文章目录 前言一、SCTP是什么?二、lksctp三.sctp初始化四.绑定本端两个IP 五.与对端建链六.设置主要路径七.设置是否启用心跳八.关于防火墙的配置 总结 …...
MFC的SendMessage与PostMessage的区别
一、SendMessage 同步操作: SendMessage 是一个同步函数,它会将消息发送到指定的窗口,并等待该窗口的消息处理过程完成,然后返回。这意味着它会阻塞当前线程,直到消息处理完成。 直接调用: SendMessage 会…...
学习虚幻C++开发日志——基础案例(持续更新中)
官方文档:虚幻引擎C编程教程 | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 1.物体上下起伏并旋转 1.1第一种写法 创建一个继承于Actor的类,并为新的Actor命名为FloatingActor,然后点击Create Class 重新…...
【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引
文章目录 一、数据存储方式二、二维网格二维线程块三、二维网格一维线程块四、一维网格一维线程块 为了方便下次找到文章,也方便联系我给大家提供帮助,欢迎大家点赞👍、收藏📂和关注🔔!一起讨论技术问题&am…...
VSCode Qt6安装OpenSSL
报错 Could NOT find OpenSSL, try to set the path to OpenSSL root folder in thesystem variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARYOPENSSL_INCLUDE_DIR SSL Crypto) (Required is at least version "3.0")问题确认 这个错误显示在Windows环境…...
JAVA学习-练习试用Java实现“定义一个用户类,包含用户名和密码”
问题: 定义一个用户类(User),包含用户名(username)和密码(password)属性,提供静态方法验证密码是否有效(长度至少为6),并提供getter和…...
大数据之VIP(Virtual IP,虚拟IP)负载均衡
VIP(Virtual IP,虚拟IP)负载均衡是一种在计算机网络中常用的技术,用于将网络请求流量均匀地分散到多个服务器上,以提高系统的可扩展性、可靠性和性能。以下是对VIP负载均衡的详细解释: 一、VIP负载均衡的基…...
鸿蒙网络编程系列38-Web组件文件下载示例
1. web组件文件下载能力简介 在本系列的第22篇文章,介绍了web组件的文件上传能力,同样的,web组件也具备文件下载能力,鸿蒙API提供了处理web组件下载事件的委托类型WebDownloadDelegate,该类型包括四个下载事件的回调接…...
Cisco Packet Tracer 8.0 路由器的基本配置和Telnet设置
文章目录 构建拓扑图配置IP地址配置路由器命令说明测试效果 构建拓扑图 1,添加2811路由器。 2,添加pc0。 3,使用交叉线连接路由器和pc(注意线路端口)。 4,使用配置线连接路由器和pc(注意线路…...
Flink系列之:学习理解通过状态快照实现容错
Flink系列之:学习理解通过状态快照实现容错 状态后端检查点存储状态快照状态快照如何工作?确保精确一次(exactly once)端到端精确一次 状态后端 由 Flink 管理的 keyed state 是一种分片的键/值存储,每个 keyed state…...
Linux 读者写者模型
1.背景概念 在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。这样就衍生出了读者写者模型,在这个模型中,有两类线程:读者和写者。读…...
JavaScript 的 axios 实现文件下载功能
用 JavaScript 的 axios 实现文件下载功能,咱们要分几个步骤来搞定它!最主要的部分是处理 二进制数据,可以生成一个进度检测,然后把它保存为文件。 文件名的获取二进制数据获取创建下载链接 const axios require(axios);const g…...
合合信息亮相2024中国模式识别与计算机视觉大会,用AI构建图像内容安全防线
近日,第七届中国模式识别与计算机视觉大会(简称“PRCV 2024”)在乌鲁木齐举办。大会由中国自动化学会(CAA)、中国图象图形学学会(CSIG)、中国人工智能学会(CAAI)和中国计…...
深度学习:匿名函数lambda函数的使用与numerical_gradient函数
背景: 假设我们有一个简单的线性回归模型,其损失函数是均方误差(MSE): class LinearModel:def __init__(self):self.W np.random.randn(1, 1) # 初始化权重def predict(self, x):return np.dot(x, self.W) # 线性预…...
PHP数据类型
几种常用的数据类型: String(字符串) Integer(整型) Float(浮点型) Boolean(布尔型) NULL(空值) Array(数组) Obje…...
2FA-双因素认证
双因素认证(2FA,Two-Factor Authentication)是一种提高安全性的方法,要求用户在登录或进行某些敏感操作时提供两种不同类型的身份验证信息。这种方法通过引入第二层验证,增加了账户被未经授权访问的难度。 项目结构 …...
解决 Python 中的 TypeError 错误
解决 Python 中的 TypeError 错误 在 Python 编程中,TypeError 是一种常见的错误,通常发生在尝试对不兼容的类型进行操作时。了解这个错误的原因以及如何有效解决它,对于提高代码的可靠性和可读性至关重要。本文将详细讨论 TypeError 的成因…...
快速学会C 语言基本概念和语法结构
😀前言 本篇博文是关于C 语言的基本概念和语法结构,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&a…...
Python酷库之旅-第三方库Pandas(172)
目录 一、用法精讲 791、pandas.UInt8Dtype类 791-1、语法 791-2、参数 791-3、功能 791-4、返回值 791-5、说明 791-6、用法 791-6-1、数据准备 791-6-2、代码示例 791-6-3、结果输出 792、pandas.UInt16Dtype类 792-1、语法 792-2、参数 792-3、功能 792-4、…...
Linux系统下minio设置SSL证书进行HTTPS远程连接访问
文章目录 1.配置SSL证书使用HTTPS访问2.MINIO SDK 忽略证书验证3.使用受信任的证书 1.配置SSL证书使用HTTPS访问 生成域名对应的SSL证书,下载Apache版本,我目前只发现Apache这个里面有对应的私钥和证书 私钥重命名为private.key证书重命名为public.crt&…...
npm 包的命名空间介绍,以及@typescript-eslint/typescript-eslint
npm 包的命名空间是一个重要的概念,用于组织和管理相关的包。通过命名空间,开发者可以避免命名冲突、增强包的可读性和可维护性。以下是关于 npm 命名空间的详细介绍,并以 typescript-eslint 作为示例。 1. 命名空间的结构 命名空间的格式为…...
ecovadis评估是什么,有什么提成自己评分等级
EcoVadis评估是一个企业社会责任(CSR)评级平台,旨在评估全球供应链的可持续性和道德情况。以下是对EcoVadis评估的详细介绍以及提升其评分等级的方法: 一、EcoVadis评估概述 定义:EcoVadis评估通过一系列框架评估公司…...
Vue3中ref、toRef和toRefs之间有什么区别?
前言 Vue 3 引入了组合式 API,其中 ref、toRef 和 toRefs 是处理响应式数据的核心工具。作为高级计算机工程师,我们有必要深入理解这些工具的细微差别,以便在实际项目中更加高效地管理状态。本文将详细解析 ref、toRef 和 toRefs 的区别&…...
react开发技巧
/* eslint-disable no-useless-escape */ const Validator { isEmail: /^([a-zA-Z0-9_\.\-])\(([a-zA-Z0-9\-])\.)([a-zA-Z0-9]{2,4})$/, // 校验邮箱 isPhoneNumber: /^1[3456789]\d{9}$/, // 手机号码验证 isMobileNumber: /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/, //…...
HarmonyOS第一课——HarmonyOS介绍
HarmonyOS第一课 HarmonyOS介绍 HarmonyOS是新一代的智能终端操作系统(泛终端服务的载体); 智慧互联协同,全场景交互体验; 核心技术理念: 一次开发 多次部署: 预览 可视化开发UI适配 事件交…...
XCode16中c++头文件找不到解决办法
XCode16中新建Framework,写完自己的c代码后,提示“<string> file not found”等诸如此类找不到c头文件的错误。 工程结构如下: App是测试应用,BoostMath是Framework。基本结构可以参考官方demo:Mix Swift and …...
CSS - 保姆级面试基础扫盲版本一
盒子模型 盒子模型定义: 当对一个盒子模型进行文档布局的时候,浏览器的渲染引擎会根据标准之一的CSS盒子模型(CSS basic box model),将所有元素表示成一个个矩阵盒子。 一个盒子通常由四部分组成:border p…...
51c自动驾驶~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/11491137 #BEVWorld BEV潜在空间构建多模态世界模型,全面理解自动驾驶~一、引言 世界模型建模了有关环境的知识,其可以通过给定的条件对未来进行合理的想象。未来想象要求世界模型具有物理规律的理解…...
网站开发模板专家数据库/爱站网关键字挖掘
伴随着疫情影响的逐渐减弱和国际竞争的不断加剧,全球制造业的数字化转型正在加速推进。中国作为全球的制造业大国、全球供应链体系最完备的国家,只有快速实现数字化的升级和转型,才能持续的在风高浪急的新局面中保持“中国制造”的优势。当前…...
郑州网站建设到诺然/弹窗广告最多的网站
Vue 官方团队于 2020 年 9 月 18 日晚 11 点半左右发布了 Vue3.0 版本 。代号为 One Piece。Vue 3.0 终于发布了,具体更新内容详见 v3.0.0。官网地址 Vue,但内容还都是英文的,毕竟刚发布嘛,中文内容还没那么快。Vue3 英文指引索性…...
国内包装设计网站/百度浏览器打开
第一次, 写点啥呢? 分享一下订阅的资源吧! 1 <?xml version"1.0" encoding"UTF-8"?>2 3 <opml version"1.0">4 <head>5 <title>建勇 subscriptions in feedly Cloud</title>6 </head>7…...
joomla 转 wordpress/营销网站制作公司
VC操作Windows快捷方式(自己总结)二个操作:新建和解析主要用到的是COM组件。IShellLink和IPersistFile需要添加的头函数shobjidl.hIPersistFile主要用到两个成员函数:1、Save。保存内容到文件中去2、Load。读取Load的函数原型HRESULT Load(LPCOLSTR pszF…...
东莞网站设计实力/如何学会推广和营销
我觉得自己的目标很混乱,总是看这个又看那个.虽说这个习惯不好,可是也增加了许多见识.今天尝试编写内核模块,写了一个hello,world,结果弄了1个小时。主要参考了网上的人的说明,结果发现尽信书不如无书,很多人说的都不是很仔细,我觉得这对于初…...
天津品牌网站建设公司/安卓优化大师
你以前更新Lync 2010 KB如何更新?你现在更新Lync 2013 KB如何更新?如果你使用Windows更新,那就不用向下面看了。如果你使用SCCM更新,那你也不用向下面看了。如果你是手动更新,那就千万注意以下的过程了,否则,吃亏的是…...