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

正则表达式(一)

一、模式(Patterns)和修饰符(flags)

通过正则表达式,我们可以在文本中进行搜索和替换操作,也可以和字符串方法结合使用。
正则表达式
正则表达式(可叫作 “regexp”,或 “reg”)由 模式 和可选的 修饰符 组成。
语法:

regexp = new RegExp("pattern", "flags");
regexp = /pattern/; // 没有修饰符
regexp = /pattern/gmi; // 带有修饰符 

斜线 /…/ 告诉 JavaScript 我们正在创建一个正则表达式。它的作用与字符串的引号作用相同。

注意:
这两种语法之间的主要区别在于,使用斜线 /…/ 的模式不允许插入表达式(如带有 ${…} 的字符串模板)。它是完全静态的。

从动态生成的字符串创建一个正则表达式时,使用new RegExp 例:

let tag = prompt("What tag do you want to find?", "h2");// 如果在上方输入到 prompt 中的答案是 "h2",则与 /<h2>/ 相同
let regexp = new RegExp(`<${tag}>`);

1.修饰符

● i :使用此修饰符后,搜索时不区分大小写:A 和 a 之间没有区别
● g :使用此修饰符后,搜索时会寻找所有的匹配项 —— 没有它,则仅返回第一个匹配项。
● m : 多行模式
● s :启用 “dotall” 模式,允许点 . 匹配换行符 \n)。
● u :开启完整的 Unicode 支持。该修饰符能够正确处理代理对。
● y :粘滞(Sticky)模式,在文本中的确切位置搜索

2.搜索:str.match()

str.match(regexp) 方法在字符串 str 中寻找 regexp 的所有匹配项。
正则表达式具有修饰符 g

//返回一个由所有匹配项所构成的数组:
let str = "We will, we will rock you";
alert( str.match(/we/gi) ); // We,we(由两个匹配的子字符串构成的数组)
console.log(str.match(/we/gi) )

请注意,We 和 we 都被找到了,因为修饰符 i 使得正则表达式在进行搜索时不区分大小写。

没有修饰符 g

如果没有这样的修饰符,它则会以数组形式返回第一个匹配项,索引 0 处保存着完整的匹配项,返回的结果的属性中还有一些其他详细信息:

let str = "We will, we will rock you";let result = str.match(/we/i); // 没有修饰符 g
console.log( result ); 
console.log( result[0] );     // We(第一个匹配项)
console.log( result.length ); // 1// 详细信息:
console.log( result.index );  // 0(匹配项的位置)
console.log( result.input );  // We will, we will rock you(源字符串)

如果正则表达式中有一部分内容被包在括号里,那么返回的数组可能会有 0 以外的索引。

没有匹配项

如果没有匹配项,则返回 null(无论是否有修饰符 g)。
如果没有匹配项,我们不会收到一个空数组,而是会收到 null。

let matches = "JavaScript".match(/HTML/); // = nullif (!matches.length) { // Error: Cannot read property 'length' of nullconsole.log("Error in the line above");
}

如果我们希望的结果始终是数组,可以这样写:

let matches = "JavaScript".match(/HTML/) || [];if (!matches.length) {console.log("No matches"); // 现在可以了
}

3.替换:str.replace

str.replace(regexp, replacement) 方法使用 replacement 替换在字符串 str 中找到的 regexp 的匹配项(如果带有修饰符 g 则替换所有匹配项,否则只替换第一个)。

// 没有修饰符 g
alert( "We will, we will".replace(/we/i, "I") ); // I will, we will// 带有修饰符 g
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I wil

l

第二个参数是字符串 replacement。我们可以在其中使用特殊的字符组合来对匹配项进行插入:
符号 在替换字符串中的行为

$& 插入整个匹配项
$` 插入字符串中匹配项之前的字符串部分
$’ 插入字符串中匹配项之后的字符串部分
$n 如果 n是一个 1-2位的数字,则插入第 n 个分组的内容
$< name> 插入带有给定 name的括号内的内容
$$ 插入字符 $

示例:

console.log( "I love HTML".replace(/HTML/, "$& and JavaScript") ); // I love HTML and JavaScript
console.log( "I love HTML".replace(/HTML/, "$` and JavaScript") ); // I love I love and JavaScript
console.log( "I love HTML".replace(/HTML/, "$' and JavaScript") ); // I love and JavaScript

4.测试:regexp.test

regexp.test(str) 方法寻找至少一个匹配项,如果找到了,则返回 true,否则返回 falselet str = "I love JavaScript";
let regexp = /LOVE/i;
console.log( regexp.test(str) ); // true

小节

● 正则表达式由模式和可选择修饰符构成:g、i、m、u、s 和 y。
●没有修饰符和特殊符号(稍后我们会学到),那么正则表达式的搜索和子字符串的搜索相同。
●str.match(regexp)方法寻找匹配项:如果带有修饰符 g,则会返回所有匹配项,否则只会返回第一个匹配项。
● str.replace(regexp,replacement) 方法使用 replacement 替换 regexp 的匹配项:如果带有修饰符
g,则会替换所有匹配项,否则只会替换第一个匹配项。
● regexp.test(str) 方法用于测试,如果找到至少一个匹配项则返回 true,否则返回 false。

二、字符类

字符类(Character classes) 是一种特殊的符号,匹配特定集合中的任何符号。
首先,让我们探索“数字”类。它写为 \d,对应于“任何一位数字”。
例如,让我们找到电话号码的第一个数字:

let str = "+7(903)-123-45-67";let regexp = /\d/;console.log( str.match(regexp) ); // 7

如果没有修饰符g,那么正则表达式仅查找第一个匹配项,即第一个数字\d。
这时候可以添加g来查找所有数字:

let str = "+7(903)-123-45-67";let regexp = /\d/g;console.log( str.match(regexp) ); // 匹配项构成的数组:7,9,0,3,1,2,3,4,5,6,7// 让我们将其输出为纯数字构成的电话号码:
console.log( str.match(regexp).join('') ); // 79031234567

这是数字的字符类。还有其他字符类。

最常用的是:
\d(“d” 来自 “digit”) 数字:从 0 到 9 的字符。
\s(“s” 来自 “space”)空格符号:包括空格,制表符 \t,换行符 \n 和其他少数稀有字符,例如 \v、\f 和 \r。
\w(“w” 来自 “word”) “单字”字符:拉丁字母或数字或下划线 _。非拉丁字母(如西里尔字母或印地文)不属于 \w。例如,\d\s\w 表示“数字”,后跟“空格字符”,后跟“单字字符”,例如 1 a。

正则表达式可能同时包含常规符号和字符类。
例如,CSS\d 匹配 CSS 后面带有一个数字的字符串:

let str = "Is there CSS4?";
let regexp = /CSS\d/console.og( str.match(regexp) ); // CSS4

我们还可以使用更多字符类:

console.log( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'

1.匹配项(每个正则表达式字符类都有对应的结果字符):

反向类

对于每个字符类,都有一个“反向类”,用相同的字母表示,但是大写的。
“反向”表示它与所有其他字符匹配,例如:

\D : 非数字:除\d以外的任何字符,例如字母
\S : 非空格符号:除 \s 以外的任何字符,例如字母。
\W : 非单字字符:除 \w 以外的任何字符,例如非拉丁字母或空格。

这个时候就可以使用\D来查找非数字并且将其从字符串中删除:

let str = "+7(903)-123-45-67";console.log( str.replace(/\D/g, "") ); // 79031234567

点(.)匹配“任何字符”

点 . 是一种特殊字符类,它与“除换行符之外的任何字符”匹配(只匹配一个字符)。

console.log("Z".match(/./)) ; //Z

或者在正则表达式中间:

let regexp = /CS.4/;console.log( "CSS4".match(regexp) ); // CSS4
console.log( "CS-4".match(regexp) ); // CS-4
console.log( "CS 4".match(regexp) ); // CS 4(空格也是一个字符)

点表示“任何字符”,而不是“缺少字符”。必须有一个与之匹配的字符:

console.log( "CS4".match(/CS.4/) ); // null,没有匹配项,因为这里没有与点匹配的字符
console.log( "CSSS4".match(/CS.4/) ); // null,没有匹配项,因为只能匹配一个字符这里中间有两个S

带有修饰符 “s” 时点字符类匹配任何字符

默认情况下,点与换行符 \n 不匹配。
例如,正则表达式 A.B 匹配 A,然后匹配 B 和它们之间的任何字符,除了换行符\n:

console.log( "A\nB".match(/A.B/) ); // null(无匹配项)

如果要匹配任何字符,那么就可以使用修饰符s,如果有s修饰符那么点 .就可以匹配任何字符

console.log("A\nB".match(/A.B/s) ) // A\nB 

‘ 注意:这里的点依旧只可以匹配一个字符,如果有多个字符,那么结果会是 n u l l ,如果要匹配多个字符,那么字符数与点的数量相同。 ` 注意:这里的点依旧只可以匹配一个字符,如果有多个字符,那么结果会是null,如果要匹配多个字符,那么字符数与点的数量相同。 注意:这里的点依旧只可以匹配一个字符,如果有多个字符,那么结果会是null,如果要匹配多个字符,那么字符数与点的数量相同。`
示例:

console.log("ACMB".match(/A..B/s) ) // ACMB

三、Unicode:修饰符 “u” 和类 \p{…}

JavaScript 对字符串使用 Unicode 编码。大多数字符使用 2 个字节编码,但这种方式只能编码最多 65536 个字符。
这个范围不足以对所有可能的字符进行编码,这就是为什么使用 4 个字节对一些罕见的字符进行编码,比如 𝒳(数学符号 X)或 😄(笑脸),一些象形文字等等。
字符 Unicode Unicode 中的字节数
a 0x0061 2
≈ 0x2248 2
𝒳 0x1d4b3 4
𝒴 0x1d4b4 4
😄 0x1f604 4

1.Unicode 属性 \p{…}

Unicode 中的每个字符都有很多属性。它们描述了字符所属的“类别”,包含了关于字符的各种信息。
例如,如果一个字符具有 Letter 属性,这意味着这个字符归属于(任意语言的)字母表。而 Number 属性则表示这是一个数字:也许是阿拉伯数字,亦或是中文数字,等等。
我们可以查找具有某种属性的字符,写作 \p{…}。为了使用 \p{…},一个正则表达式必须使用修饰符 u。

let str = "A ბ ㄱ";alert( str.match(/\p{L}/gu) ); // A,ბ,ㄱ
alert( str.match(/\p{L}/g) ); // null(没有匹配项,因为没有修饰符 "u")

以下是主要的字符类别和它们对应的子类别:

● 字母(Letter)L:
○ 小写(lowercase)Ll,
○ 修饰(modifier)Lm,
○ 首字母大写(titlecase)Lt,
○ 大写(uppercase)Lu,
○ 其它(other)Lo。
● 数字(Number)N:
○ 十进制数字(decimal digit)Nd,
○ 字母数字(letter number)Nl,
○ 其它(other)No。
● 标点符号(Punctuation)P:
○ 连接符(connector)Pc,
○ 横杠(dash)Pd,
○ 起始引号(initial quote)Pi,
○ 结束引号(final quote)Pf,
○ 开(open)Ps,
○ 闭(close)Pe,
○ 其它(other)Po。
● 标记(Mark)M(accents etc):
○ 间隔合并(spacing combining)Mc,
○ 封闭(enclosing)Me,
○ 非间隔(non-spacing)Mn。
● 符号(Symbol)S:
○ 货币(currency)Sc,
○ 修饰(modifier)Sk,
○ 数学(math)Sm,
○ 其它(other)So。
● 分隔符(Separator)Z:
○ 行(line)Zl,
○ 段落(paragraph)Zp,
○ 空格(space)Zs。
● 其它(Other)C:
○ 控制符(control)Cc,
○ 格式(format)Cf,
○ 未分配(not assigned)Cn,
○ 私有(private use)Co,
○ 代理伪字符(surrogate)Cs。
也有其它派生的类别,例如:
● Alphabetic(Alpha),包含了字母 L,加上字母数字 Nl(例如 Ⅻ —— 罗马数字 12),加上一些其它符号 Other_Alphabetic(OAlpha)。
● Hex_Digit 包括 16 进制数字 0-9,a-f。
● ……等等。

Unicode 支持很多不同的属性,列出整个清单需要占用大量的篇幅,因此在这里列出相关的链接:

● 列出一个字符的所有属性:https://unicode.org/cldr/utility/character.jsp.
● 按照属性列出所有的字符:https://unicode.org/cldr/utility/list-unicodeset.jsp.
● 属性的对应缩写形式:https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt.
● 以文本格式整理的所有 Unicode 字符,包含了所有的属性:https://www.unicode.org/Public/UCD/latest/ucd/.

举例:16进制数
查找16进制数,写作 xFF 其中 F 是一个 16 进制的数字(0…9 或者 A…F)。
一个 16 进制数字可以表示为 \p{Hex_Digit}:

let regexp = /x\p{Hex_Digit}\p{Hex_Digit}/u;alert("number: xAF".match(regexp)); // xAF

举例:中文字符
有一个 Unicode 属性 Script(一个书写系统),这个属性可能有一个值:Cyrillic、Greek、Arabic、Han(中文)等等,这里是一个完整的列表。
要在给定的书写系统中查找字符,我们需要使用 Script=,例如对于西里尔字母:\p{sc=Cyrillic},中文象形文字:\p{sc=Han},等等。

let regexp = /\p{sc=Han}/gu; // 返回中文象形文字let str = `Hello Привет 你好 123_456`;alert( str.match(regexp) ); // 你,好

举例:货币
表示货币的字符,例如 $、€ 和 ¥,具有 Unicode 属性 \p{Currency_Symbol},缩写为 \p{Sc}。

let regexp = /\p{Sc}\d/gu; //查找所有的货币符号以及数字let str = `Prices: $2, €1, ¥9`;alert( str.match(regexp) ); // $2,€1,¥9

总结

修饰符 u 表示启用正则表达式中对 Unicode 的支持。
这意味着两件事:

  1. 4 个字节长的字符被以正确的方式处理:被看成单个字符,而不是 2 个 2 字节长的字符。
  2. Unicode 属性可以被用于查找:\p{…}。
    有了 unicode 属性我们可以查找给定语言中的词,特殊字符(引用,货币)等等。
    四、锚点:字符串开始 ^ 和末尾 $
    插入符号 ^ 和美元符号 $ 在正则表达式中具有特殊的含义。它们被称为“锚点”。
    插入符号 ^ 匹配文本开头,而美元符号 $ 则匹配文本末尾。
    let str = “张三”;
    console.log(/^张/.test(str)) //true 判断是否以张开头
    let str1 = “李四”;
    alert( /四 / . t e s t ( s t r 1 ) ) ; / / t r u e 判断是否以四结尾测试完全匹 配 . . . /.test(str1) ); // true 判断是否以四结尾 测试完全匹配 ^... /.test(str1));//true判断是否以四结尾测试完全匹...结合使用。示例如下:
    //测试一个字符串是否是 12:34(\d\d:\d\d) 格式的时间
    let time1 = “01:13”;
    let time2 = “01:134”;
    let regexp = /^\d\d:\d\d$/;
    console.log(regexp.test(time1)) // true
    console.log(regexp.test(time2))// false

五、锚点 ^ $ 的多行模式,修饰符 “m”

多行模式由修饰符 m 启用。
它只影响 ^ 和 $ 的行为。
在多行模式下,它们不仅仅匹配文本的开始与末尾,还匹配每一行的开始与末尾。
搜索行的开头

let str = `1one
2two
3three`;  //注意:每行内容一定要在编辑器最左边,否则会默认为是一行内容中间为空格
console.log(str.match(/^\d/gm)) // [1,2,3]

没有修饰符 m 时,仅会匹配第一个数字:

let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;console.log( str.match(/^\d/g) ); // 1

注意:“行的开头”表示“就在换行符之后”:多行模式下的测试 ^ 匹配所有以换行符 \n 开头的位置。以及在文本开始的位置。
搜索行的末尾 $
正则表达式 \d$ 寻找每行的最后一个数字

let str = `red:1
yellow:2
green:3
`;
//没有修饰符 m,那么美元符 $ 将只会匹配整个文本的末尾,所以只有最后一个数字会被匹配。
consoel.log(str.match(/\d$/gm));//[1,2,3]

注意:“行的末尾”表示“就在换行符之前”:多行模式下的测试 $ 匹配所有以换行符 \n 结尾的位置。以及在文本末尾的位置。

搜索 \n 而不是 ^ $
要寻找新的一行,我们不仅可以使用锚点 ^ 和 $,也可以使用换行符 \n。

let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;console.log( str.match(/\d\n/g) ); // 1\n,2\n

区别:

  1. 这里只匹配到了两个,因为3之后没有换行了
  2. 现在每个匹配项都包含换行符。与锚点^ $不同,锚点只测试条件(行的开始与末尾),而\n是一个字符,因此结果中有\n。 我们需要结果中有换行符时,使用 \n。而锚点则用于在行的开头/末尾查找某些内容。

六、结束语

本节正则表达式就到此结束了,但是正则表达式的内容还不只这些,下一节会继续讲解正则表达式的使用,欢迎小伙伴们来参阅,不要忘记点赞加加关注哦。

相关文章:

正则表达式(一)

一、模式&#xff08;Patterns&#xff09;和修饰符&#xff08;flags&#xff09; 通过正则表达式&#xff0c;我们可以在文本中进行搜索和替换操作&#xff0c;也可以和字符串方法结合使用。 正则表达式 正则表达式&#xff08;可叫作 “regexp”&#xff0c;或 “reg”&…...

需求变更导致成本超支,如何止损

需求变更导致成本超支时&#xff0c;可以通过加强需求管理、严格的变更控制流程、优化资源配置、实施敏捷开发、提高风险管理意识等方法有效止损。其中&#xff0c;加强需求管理是止损的核心措施之一。需求管理涉及需求明确化、需求跟踪和变更的管理&#xff0c;有效的需求管理…...

《数据分析与可视化》(清华)ch5-实训代码

小费数据集预处理——求思考题_有问必答-CSDN问答 以上代码在Jupyter Notebook中可以运行&#xff0c;但是在python中就会出如下问题&#xff1a; 这个错误表明在尝试计算均值填充缺失值时&#xff0c;数据中包含非数值类型的列&#xff08;如文本列&#xff09;&#xff0c;…...

E: The package APP needs to be reinstalled, but I can‘t find an archive for it.

要解决错误 “E: The package mytest needs to be reinstalled, but I can’t find an archive for it”&#xff0c;通常是因为系统中存在损坏的软件包记录或安装过程中断导致 /var/lib/dpkg/status 文件异常。以下是综合多篇搜索结果的解决方案&#xff1a; 解决步骤 备份关…...

若依startPage()详解

背景 startPage基于PageHelper来进行强化&#xff0c;在用户传入pagesize,pageNum等标准参数的时候不需要进行解析 步骤 1.通过ServletUtils工具类getRequestAttributes来获取当前线程的上下文信息 public static ServletRequestAttributes getRequestAttributes() {try {R…...

Oracle AQ

Oracle AQ&#xff08;Advanced Queuing&#xff09; 是 Oracle 数据库内置的一种消息队列&#xff08;Message Queue&#xff09;技术&#xff0c;用于在应用或系统之间实现异步通信、可靠的消息传递和事件驱动架构。它是 Oracle 数据库的核心功能之一&#xff0c;无需依赖外部…...

npm报错CERT_HAS_EXPIRED解决方案

npm报错解决方案 npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED方案1:尝试切换镜像 # 使用腾讯云镜像 npm config set registry https://mirrors.cloud.tencent.com/npm/# 或使用官方npm源&#xff08;科学上网&#xff09; npm config set registry http…...

pnpm 中 Next.js 模块无法找到问题解决

问题概述 项目在使用 pnpm 管理依赖时,出现了 “Cannot find module ‘next/link’ or its corresponding type declarations” 的错误。这是因为 pnpm 的软链接机制在某些情况下可能导致模块路径解析问题。 问题诊断 通过命令 pnpm list next 确认项目已安装 Next.js 15.2.…...

急速实现Anaconda/Miniforge虚拟环境的克隆和迁移

目录 参考资料 点击Anaconda Prompt (anaconda_base) 查看现有环境 开始克隆&#xff0c;以克隆pandas_env为例&#xff0c;新的环境名字为image (base) C:\Users\hello>conda create -n image --clone pandas_env查看克隆结果&#xff0c;image环境赫然在列。 然后粘贴…...

OpenCv高阶(二)——图像的掩膜

目录 掩膜 bitwise_and原理 掩膜的实现 1、基于像素操作 2、使用形态学操作 3、基于阈值处理 案例 1、读取原图并绘制掩膜 2、掩膜的实现 3、绘制掩膜的直方图 应用 掩膜 OpenCV 中图像掩膜&#xff08;Mask&#xff09;实现的原理是通过一个与原始图像大小相同的二…...

数据结构和算法(十二)--最小生成树

一、最小生成树 定义&#xff1a;图的生成树是它的一颗含有其所有顶点的无环连通子图&#xff0c;一副加权无向图的最小生成树它的一颗权值&#xff08;树中所有边的权重之和&#xff09;最小的生成树。 约定&#xff1a;只考虑连通图。最小生成树的定义说明它只能存在于连通图…...

开源酷炫的Linux监控工具:sampler

sampler是一个开源的监控工具&#xff0c;来自GitHub用户sqshq&#xff08;Alexander Lukyanchikov&#xff09;的匠心之作。 简单来说&#xff0c;sampler能干这些事儿&#xff1a; 实时监控&#xff1a;CPU、内存、磁盘、网络&#xff0c;甚至应用程序的状态&#xff0c;它…...

InternVideo2.5:Empowering Video MLLMs with Long and Rich Context Modeling

一、TL&#xff1b;DR InternVideo2.5通过LRC建模来提升MLLM的性能。层次化token压缩和任务偏好优化&#xff08;mask时空 head&#xff09;整合到一个框架中&#xff0c;并通过自适应层次化token压缩来开发紧凑的时空表征MVBench/Perception Test/EgoSchema/MLVU数据benchmar…...

OSPF基础与特性

一.OSPF 的技术背景 OSPF出现是因为RIP协议无法满足大型网络的配置 RIP协议中存在的问题 RIP中存在最大跳数为15的限制,不能适应大规模组网 RIP周期性发送全部路由信息,占用大量的带宽资源 路由收敛速度慢 以跳数作为度量衡,选路可能会不优 存在路由环路的可能性 每隔30秒更新…...

[Linux]从零开始的ARM Linux交叉编译与.so文件链接教程

一、前言 最近在项目需要将C版本的opencv集成到原本的代码中从而进行一些简单的图像处理。但是在这其中遇到了一些问题&#xff0c;首先就是原本的opencv我们需要在x86的架构上进行编译然后将其集成到我们的项目中&#xff0c;这里我们到底应该将opencv编译为x86架构的还是编译…...

golang 中 make 和 new 的区别?

在Go语言中&#xff0c;make 和 new 都是用于内存分配的关键字&#xff0c;但它们在使用场景、返回值和初始化方式等方面存在一些区别&#xff0c;以下是具体分析&#xff1a; 使用场景 make 只能用于创建 map、slice 和 channel 这三种引用类型&#xff0c;用于初始化这些类型…...

碧螺春是绿茶还是红茶

碧螺春是绿茶&#xff0c;不是红茶。 碧螺春的特点&#xff1a; 类别: 碧螺春属于中国六大茶类中的绿茶类。产地: 它产自中国江苏省苏州市太湖的东山和西山&#xff08;现称金庭镇&#xff09;&#xff0c;是中国十大名茶之一。外形: 碧螺春茶叶外形卷曲如螺&#xff0c;色泽…...

Linux平台搭建MQTT测试环境

Paho MQTT Paho MQTT‌ 是 Eclipse 基金会下的一个开源项目&#xff0c;旨在为多种编程语言提供 ‌MQTT 协议‌的客户端实现。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅&#xff08;Pub/Sub&#xff09;消息传输协议&#xff…...

【AI学习】AI Agent(人工智能体)

1&#xff0c;AI agent 1&#xff09;定义 是一种能够感知环境、基于所感知到的信息进行推理和决策&#xff0c;并通过执行相应动作来影响环境、进而实现特定目标的智能实体。 它整合了多种人工智能技术&#xff0c;具备自主学习、自主行动以及与外界交互的能力&#xff0c;旨…...

克魔助手(Kemob)安装与注册完整教程 - Windows/macOS双平台指南

iOS设备管理工具克魔助手便携版使用全指南 前言&#xff1a;为什么需要专业的iOS管理工具 在iOS开发和设备管理过程中&#xff0c;开发者经常需要突破系统限制&#xff0c;实现更深层次的控制和调试。本文将详细介绍一款实用的便携式工具的使用方法&#xff0c;帮助开发者快速…...

了解GPIO对应的主要功能

GPIO GPIO是通用输入输出端口的简称&#xff0c;芯片上的GPIO引脚与外部设备连接实现通讯、控制以及数据采集等功能&#xff0c;最基本的输出功能是通过控制引脚输出高低电平继而实现开关控制&#xff0c;比如引脚接入LED灯可控制LED灯的亮灭&#xff0c;接入继电器或三极管可…...

Dubbo 注册中心与服务发现

注册中心与服务发现 注册中心概述 注册中心是dubbo服务治理的核心组件&#xff0c;Dubbo依赖注册中心的协调实现服务发现&#xff0c;自动化的服务发现是微服务实现动态扩容、负载均衡、流量治理的基础。 Dubbo的服务发现机制经历了Dubbo2时代的接口级服务发现、Dubbo3时代的…...

一文详解LibTorch环境搭建:Ubuntu20.4配置LibTorch CUDA与cuDNN开发环境

随着深度学习技术的迅猛发展&#xff0c;越来越多的应用程序开始集成深度学习模型以提供智能化服务。为了满足这一需求&#xff0c;开发者们不仅依赖于Python等高级编程语言提供的便捷框架&#xff0c;也开始探索如何将这些模型与C应用程序相结合&#xff0c;以便在性能关键型应…...

micro ubuntu 安装教程

micro ubuntu 安装教程 官网地址 : https://micro-editor.github.io 以下是在 Ubuntu 系统中安装 micro 编辑器 的详细教程&#xff1a; 方法 1&#xff1a;通过 ​apt​​ 直接安装&#xff08;推荐&#xff09; 适用于 Ubuntu 20.04 及以上版本&#xff08;官方仓库已收录…...

观成科技:利用DoH加密信道的C2流量分析

概述 DoH&#xff08;DNS over HTTPS&#xff09;是一种通过HTTPS协议加密传输DNS查询的信道&#xff0c;将DNS请求封装在HTTP/2或HTTP/3中&#xff0c;DoH没有标准端口&#xff0c;部分服务沿用TLS的443端口。传统DNS明文传输易被拦截或篡改&#xff0c;而DoH通过加密提升了隐…...

行星际空间的磁流体动力激波:理论综述

Magnetohydrodynamic Shocks in the Interplanetary Space: a Theoretical Review ( Part 2 ) ​​​​​​​Magnetohydrodynamic Shocks in the Interplanetary Space: a Theoretical Review | Brazilian Journal of Physics Magnetohydrodynamic Shocks 1. The Rankine-Hu…...

Java垃圾回收的隐性杀手:过早晋升的识别与优化实战

目录 一、现象与症状 二、过早晋升的成因 &#xff08;一&#xff09;Young区&#xff08;Eden区&#xff09;配置过小 &#xff08;二&#xff09;分配速率过高 &#xff08;三&#xff09;晋升年龄阈值&#xff08;MaxTenuringThreshold&#xff09;配置不当 三、动态晋…...

2noise团队开源ChatTTS,支持多语言、流式合成、语音的情感、停顿和语调控制

简介 ChatTTS 是一个开源的文本转语音&#xff08;Text-to-Speech, TTS&#xff09;项目&#xff0c;由 2noise 团队开发&#xff0c;专门为对话场景设计。它在 GitHub 上广受欢迎&#xff0c;因其自然流畅的语音合成能力和多功能性而备受关注。 项目背景 目标&#xff1a;设计…...

企业级防火墙与NAT网关配置

实训背景 某公司需部署一台Linux网关服务器&#xff0c;要求实现以下功能&#xff1a; 基础防火墙&#xff1a;仅允许SSH&#xff08;22&#xff09;、HTTP&#xff08;80&#xff09;、HTTPS&#xff08;443&#xff09;入站&#xff0c;拒绝其他所有流量。共享上网&#xf…...

AI数据分析的正道是AI+BI,而不是ChatBI

一、AI大模型在数据分析中的应用现状与局限 当前用户直接上传PDF、Excel等原始数据至AI大模型进行自动分析的趋势显著&#xff0c;但其技术成熟度与落地效果仍需审慎评估。 1.主流AI大模型的数据分析能力对比 GPT-4/Claude 3系列&#xff1a;在通用数据分析任务中表现突出&a…...

C++设计模式优化实战:提升项目性能与效率

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开发技术&#xff0c;能熟练应用常用数据库SQL server,Oracle…...

G1学习打卡

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 import argparse import os import numpy as np import torchvision.transforms as transforms from torchvision.utils import save_image from torch.utils.…...

8.2 对话框2

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 8.2.3 FolderBrowserDialog&#xff08;文件夹对话框&#xff09; 组件 FolderBrowserDialog组件&#xff0c;用于选择文件夹 Folder…...

Java中的列表(List):操作与实现详解

引言 列表&#xff08;List&#xff09;是Java集合框架中最基础且使用最频繁的线性数据结构。它允许有序存储元素&#xff0c;支持重复值和快速访问。本文将深入探讨Java列表的核心操作方法&#xff0c;并剖析两种经典实现类&#xff08;ArrayList和LinkedList&#xff09;的底…...

在kotlin的安卓项目中使用dagger

在 Kotlin 的 Android 项目中使用 ​​Dagger​​&#xff08;特别是 ​​Dagger Hilt​​&#xff0c;官方推荐的简化版&#xff09;进行依赖注入&#xff08;DI&#xff09;可以大幅提升代码的可测试性和模块化程度。 1. 配置 Dagger Hilt​​ ​​1.1 添加依赖​​ 在 bu…...

MongoDB常见面试题总结(上)

MongoDB 基础 MongoDB 是什么&#xff1f; MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统&#xff0c;由 C 编写的。MongoDB 提供了 面向文档 的存储方式&#xff0c;操作起来比较简单和容易&#xff0c;支持“无模式”的数据建模&#xff0c;可以存储比较复杂…...

leetcode6.Z字形变换

题目说是z字形变化&#xff0c;但其实模拟更像n字形变化&#xff0c;找到字符下标规律就逐个拼接就能得到答案 class Solution {public String convert(String s, int numRows) {if(numRows1)return s;StringBuilder stringBuilder new StringBuilder();for (int i 0; i <…...

VSCode中选择Anaconda的Python环境

1、安装Anaconda 2、安装VSCode 一、创建创建新的 Conda 环境 conda create --name myenv python3.8 conda activate myenv 二、在 VSCode 中配置 Conda 环境 1、打开 VSCode&#xff0c;安装 Python 插件。 2、按 CtrlShiftP 打开命令面板&#xff0c;输入并选择 Pytho…...

【基于规则】基于距离的相似性度量

基于点:设时两条序曲线分别为X,Y,在曲线上选取点Xx和Yy,计算点之间的距离,用来度量两条曲线的相似性。这类算法的精确度取决于选点的规则,以及距离的计算方式 欧几里得距离:不允许时间偏移,直接计算两个时序数据点之间的距离,适用于长度相同的序列 dtw:优化了选点的方…...

Python 序列构成的数组(当列表不是首选时)

当列表不是首选时 虽然列表既灵活又简单&#xff0c;但面对各类需求时&#xff0c;我们可能会有更好的选 择。比如&#xff0c;要存放 1000 万个浮点数的话&#xff0c;数组&#xff08;array&#xff09;的效率要高 得多&#xff0c;因为数组在背后存的并不是 float 对象&…...

LeetCode零钱兑换(动态规划)

题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无…...

vscode+wsl 运行编译 c++

linux 的 windows 子系统&#xff08;wsl&#xff09;是 windows 的一项功能&#xff0c;可以安装 Linux 的发行版&#xff0c;例如&#xff08;Ubuntu&#xff0c;Kali&#xff0c;Arch Linux&#xff09;等&#xff0c;从而可以直接在 windows 下使用 Linux 应用程序&#xf…...

C++学习之libevent ②

目录 1.连接服务器函数bufferevent_socket_connect() 2.bufferevent缓冲区的读写函数bufferevent_write() bufferevent_read() 3.给bufferevent设置回调函数bufferevent_setcb&#xff08;&#xff09; 4.bufferevent回调函数的函数原型 5.基于bufferevent的套接字客户端处…...

彩色路径 第32次CCF-CSP计算机软件能力认证

应该用dp做的但是我太懒懒得看题解了 留到考试的时候看 超时20分代码&#xff1a; #include<bits/stdc.h> using namespace std; int N, M, L, K; struct Edge {int to, length;Edge(int to, int length) :to(to), length(length) {} }; vector<int> color;//颜色…...

第1章 绪论

自1946年&#xff0c;第一台计算机问世以来&#xff0c;计算机产业飞速发展。为了编写出一个好得程序&#xff0c;必须分析待处理的对象的特征以及各处理对象之间存在的关系。这就是数据结构这门学科形成和发展的背景。 1.1什么是数据结构 数据结构是计算机科学中组织和存储数…...

SpringCloud微服务(一)Eureka+Nacos

一、认识 微服务技术对比&#xff1a; SpringCloud&#xff1a; 版本匹配&#xff1a; 二、服务拆分以及远程调用 消费者与提供者&#xff1a; Eureka&#xff1a; 搭建EurekaServer&#xff1a; Ribbon负载均衡&#xff1a; 实现原理&#xff1a; IRule&#xff1a;规则接口…...

Python 字典和集合(子类化UserDict)

本章内容的大纲如下&#xff1a; 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响&#xff08;什么样的数据类型可作为键、不可预知的 顺序&#xff0c;等等&#xff09; 子类化UserDict 就创造自…...

时区转换工具+PWA离线网页

时区转换工具PWA离线网页 一、时区转换工具对比 工具说明Date原生 JS API&#xff0c;有限的时区支持&#xff0c;无法指定时区&#xff0c;仅使用本地时区。Intl.DateTimeFormat原生格式化显示&#xff0c;可指定时区&#xff0c;但不能修改时区逻辑。luxon强烈推荐&#xf…...

Hadoop序列化与反序列化具体实践

首先创建两个类 两个类的代码 Student类&#xff1a; import org.apache.hadoop.io.Writable;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;public class Student implements Writable {public Student(String name, int age) {this.n…...

​​​​​​​Github AI开发者生态最新动态今日速览(20250408)

以下是截至2025年4月8日的GitHub AI开发者生态最新动态速览&#xff0c;结合技术更新、工具发布及行业趋势&#xff1a; 1. GitHub Copilot 重大升级与生态扩展 Agent Mode全量发布&#xff1a;Copilot在VS Code中启用Agent模式&#xff0c;可自主完成多文件代码重构、测试驱动…...